]> err.no Git - dpkg/commitdiff
Dpkg::Shlibs::SymbolFile supports meta-information fields
authorRaphael Hertzog <hertzog@debian.org>
Sun, 9 Dec 2007 10:14:47 +0000 (11:14 +0100)
committerRaphael Hertzog <hertzog@debian.org>
Thu, 13 Dec 2007 19:50:57 +0000 (20:50 +0100)
Meta-information fields are stored in symbols files on lines
starting with an asterisk. Added a corresponding non-regression
test. Updated deb-symbols(5) accordingly.

ChangeLog
man/ChangeLog
man/deb-symbols.5
scripts/Dpkg/Shlibs/SymbolFile.pm
scripts/t/200_Dpkg_Shlibs.t
scripts/t/200_Dpkg_Shlibs/symbols.fake-2

index e37452a8cf95895ec62a646a0d14167a9e71185b..1dc85f13211119a0fe8dcc62eb463ebb4154cd91 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
        the deprecated version of a symbol if it is already marked
        deprecated.
 
+2007-12-09  Raphael Hertzog  <hertzog@debian.org>
+
+       * scripts/Dpkg/Shlibs/SymbolFile.pm: Parse and dump properly
+       new meta-information fields (on lines starting with an asterisk).
+       Bugfix with alternate dependency handling that were not properly
+       dumped.
+       * scripts/t/200_Dpkg_Shlibs.t,
+       scripts/t/200_Dpkg_Shlibs/symbols.fake-2: Add a test case to
+       verify that meta-information fields and alternate dependencies are
+       properly parsed and dumped.
+
 2007-12-09  Raphael Hertzog  <hertzog@debian.org>
 
        * scripts/Dpkg/Shlibs/SymbolFile.pm (load): Pass the current
index 608d77124255a71a45302305b68f91d377d345fa..177d0272b2126087c7d0f32cedbb5f697e691b1e 100644 (file)
@@ -2,6 +2,11 @@
 
        * po/de.po: Updated to 1335t0f48u.
 
+2007-12-09  Raphael Hertzog  <hertzog@debian.org>
+
+       * deb-symbols.5: Describe syntax of meta-information
+       fields and document the Build-Depends-Package field.
+
 2007-12-09  Raphael Hertzog  <hertzog@debian.org>
 
        * dpkg-gensymbols.1: Remove the restriction that included files
index 94c1bd518c01fcb0a249ab81995318aea9f5c7d2..98a3c5548076206d493ba359d0448c39ef3f110d 100644 (file)
@@ -14,6 +14,10 @@ in these files is:
 .br
 [ | <alternative dependency template> ]
 .br
+[ ... ]
+.br
+[ * <field-name>: <field value> ]
+.br
 [ ... ]
  <symbol> <mininal version>[ <id of dependency template> ]
 .P
@@ -29,6 +33,13 @@ to a \fIminimal version\fR of its dependency template (the main dependency
 template is used if \fIid of dependency template\fR is not present). The
 first alternative dependency template is numbered 1, the second one 2,
 etc.
+.P
+Each entry for a library can also have some fields of meta-information.
+Those fields are stored on lines starting with an asterisk. Currently,
+the only valid field is \fIBuild-Depends-Package\fR, it indicates the name
+of the "-dev" package associated to the library and is used by
+dpkg-shlibdeps to make sure that the dependency generated is at least as
+strict as the corresponding build dependency.
 .SH EXAMPLES
 .SS Simple symbols file
 .PP 
@@ -41,6 +52,8 @@ libftp.so.3 libftp3 #MINVER#
 libGL.so.1 libgl1
 .br
 | libgl1-mesa-glx #MINVER#
+.br
+* Build-Depends-Package: libgl1-mesa-dev
  publicGlSymbol@Base 6.3-1
  [...]
  implementationSpecificSymbol@Base 6.5.2-7 1
index a2cf9f2e09e7375b0de9df822e1d4818c7f64b35..8f3dfe5837a9d6c4a070cfb08757a1dac60fad70 100644 (file)
@@ -19,6 +19,7 @@ package Dpkg::Shlibs::SymbolFile;
 use Dpkg::Gettext;
 use Dpkg::ErrorHandling qw(syserr warning error);
 use Dpkg::Version qw(vercmp);
+use Dpkg::Fields qw(capit);
 
 my %blacklist = (
     '__bss_end__' => 1,                # arm
@@ -129,6 +130,9 @@ sub load {
        } elsif (/^\|\s*(.*)$/) {
            # Alternative dependency template
            push @{$self->{objects}{$object}{deps}}, "$1";
+       } elsif (/^\*\s*([^:]+):\s*(.*\S)\s*$/) {
+           # Add meta-fields
+           $self->{objects}{$object}{fields}{capit($1)} = $2;
        } elsif (/^(\S+)\s+(.*)$/) {
            # New object and dependency template
            $object = $1;
@@ -137,10 +141,7 @@ sub load {
                $self->{objects}{$object}{deps} = [ "$2" ];
            } else {
                # Create a new object
-               $self->{objects}{$object} = {
-                   syms => {},
-                   deps => [ "$2" ]
-               };
+               $self->create_object($object, "$2");
            }
        } else {
            warning(sprintf(_g("Failed to parse a line in %s: %s"), $file, $_));
@@ -167,8 +168,12 @@ sub dump {
     my ($self, $fh, $with_deprecated) = @_;
     $with_deprecated = 1 unless defined($with_deprecated);
     foreach my $soname (sort keys %{$self->{objects}}) {
-       print $fh "$soname $self->{objects}{$soname}{deps}[0]\n";
-       print $fh "| $_" foreach (@{$self->{objects}{$soname}{deps}}[ 1 .. -1 ]);
+       my @deps = @{$self->{objects}{$soname}{deps}};
+       print $fh "$soname $deps[0]\n";
+       shift @deps;
+       print $fh "| $_\n" foreach (@deps);
+       my $f = $self->{objects}{$soname}{fields};
+       print $fh "* $_: $f->{$_}\n" foreach (sort keys %{$f});
        foreach my $sym (sort keys %{$self->{objects}{$soname}{syms}}) {
            my $info = $self->{objects}{$soname}{syms}{$sym};
            next if $info->{deprecated} and not $with_deprecated;
@@ -257,6 +262,7 @@ sub create_object {
     my ($self, $soname, @deps) = @_;
     $self->{objects}{$soname} = {
        syms => {},
+       fields => {},
        deps => [ @deps ]
     };
 }
index bfc5da274ce729c7c92d5b6334f930e83c9c99cf..86bdeab21e11ffba351bbd597176275e412c59a2 100644 (file)
@@ -1,6 +1,7 @@
 # -*- mode: cperl;-*-
 
-use Test::More tests => 33;
+use Test::More tests => 34;
+use IO::String;
 
 use strict;
 use warnings;
@@ -148,6 +149,19 @@ is_deeply($sym, { 'minver' => '1.0', 'dep_id' => 1, 'deprecated' => 0,
                  'depends' => 'libvirtualfake', 'soname' => 'libfake.so.1' }, 
            'overrides order with circular #include');
 
+# Check dump output
+my $io = IO::String->new();
+$sym_file->dump($io);
+is(${$io->string_ref()},
+'libfake.so.1 libfake1 #MINVER#
+| libvirtualfake
+* Build-Depends-Package: libfake-dev
+ symbol1_fake2@Base 1.0 1
+ symbol2_fake2@Base 1.0
+ symbol3_fake2@Base 1.0
+', "Dump of $srcdir/symbols.include-2");
+
+
 # Check parsing of objdump output on ia64 (local symbols
 # without versions and with visibility attribute)
 $obj = Dpkg::Shlibs::Objdump::Object->new;
index 89586d1ed5fd1df362b40757bc60202399b2b49b..e8593b4e8fa4dda0661560abf94fd0d31b54059c 100644 (file)
@@ -1,6 +1,7 @@
 #include "symbols.include-2"
 # This is just a comment
 libfake.so.1 libfake1 #MINVER#
+* Build-Depends-Package: libfake-dev
 # The alternate dependency is below
 | libvirtualfake
  symbol1_fake2@Base 1.0 1