Package: lintian Version: 2.5.59 Severity: wishlist Tags: patch X-Debbugs-Cc: debian-gtk-gn...@lists.debian.org
I've just uploaded gobject-introspection/1.54.1-3, with GIR mini-policy updates aimed at reducing false positives from Lintian. The mini-policy now recommends that when multiple GIR typelibs are bundled in a single package (like gir1.2-gtk-3.0 containing Gtk-3.0, Gdk-3.0 and GdkX11-3.0), that package should have Provides entries for those typelibs' canonical package names (in this case gir1.2-gdk-3.0 and gir1.2-gdkx11-3.0). This gives Lintian enough information to avoid some unnecessary warnings when the attached patches are applied. Additionally, patch 0001 silences a false-positive when packages ship files other than GIR XML in /usr/share/gir-1.0 (gobject-introspection will probably be the only package to do this, but it seemed more correct to make this change rather than using an override). Thanks, smcv
>From 72fa7ee6c470b1c6051eb4f36342ff97b3550f91 Mon Sep 17 00:00:00 2001 From: Simon McVittie <s...@debian.org> Date: Thu, 2 Nov 2017 14:50:04 +0000 Subject: [PATCH 1/4] gir: Only treat *.gir files in usr/share/gir-1.0 as GIR gir-1.2.rnc, a RELAX NG schema, is in this directory but is not itself a GIR file. Signed-off-by: Simon McVittie <s...@debian.org> --- checks/gir.pm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/checks/gir.pm b/checks/gir.pm index 59d7e4099..b64d19577 100644 --- a/checks/gir.pm +++ b/checks/gir.pm @@ -69,7 +69,10 @@ sub _run_binary { $madir = '${DEB_HOST_MULTIARCH}' unless defined $madir; if (my $xmldir = $info->index_resolved_path('usr/share/gir-1.0/')) { - push @girs, $xmldir->children; + foreach my $child ($xmldir->children) { + next unless $child =~ m/\.gir$/; + push @girs, $child; + } } if (my $dir = $info->index_resolved_path('usr/lib/girepository-1.0/')) { -- 2.15.0
>From 4b5b78db2b0334d1e5f9baae9dca41bd10dbe403 Mon Sep 17 00:00:00 2001 From: Simon McVittie <s...@debian.org> Date: Sat, 11 Nov 2017 14:04:20 +0000 Subject: [PATCH 2/4] gir: Allow a Provides on the canonical name for typelib packages It's OK for closely related typelibs to be grouped together, as was done for packages like GLib, GTK+ and Tracker, as long as they are expected to bump introspection ABI version at the same time. The new mini-policy version in gobject-introspection/1.54.1-3 recommends that they have a Provides on all the package names that would have been used if they were separated (for example gir1.2-gtk-3.0 Provides gir1.2-gdk-3.0 and gir1.2-gdkx11-3.0). If this is done, we can detect it and suppress the typelib-package-name-does-not-match tag. Signed-off-by: Simon McVittie <s...@debian.org> --- checks/gir.desc | 15 ++++++++++----- checks/gir.pm | 3 ++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/checks/gir.desc b/checks/gir.desc index 611b4ac54..b154d6a88 100644 --- a/checks/gir.desc +++ b/checks/gir.desc @@ -48,11 +48,16 @@ Certainty: possible Info: GObject-Introspection binary typelibs (<tt>Foo-23.typelib</tt>) should normally be made available in a package named gir1.2-foo-23. . - Please ignore and override this tag if the typelib is deliberately shipped - in a package whose name does not match the typelib's machine-readable name. - For example, <tt>gir1.2-glib-2.0</tt> is named for the <tt>GLib-2.0</tt> - typelib, but also contains the <tt>GObject-2.0</tt> and <tt>Gio-2.0</tt> - typelibs; this is unconventional, but is allowed. + If multiple typelibs are shipped in the same package, then that package + should have versioned <tt>Provides</tt> for the names that would have been + used for separate packages. This arrangement should only be used if the + included typelibs' versions are expected to remain the same at all times. + . + For example, <tt>gir1.2-gtk-3.0</tt> is named for the <tt>Gtk-3.0</tt> + typelib, but also contains the <tt>Gdk-3.0</tt> and <tt>GdkX11-3.0</tt> + typelibs. It should have versioned <tt>Provides</tt> entries for + <tt>gir1.2-gdk-3.0 (= ${binary:Version})</tt> + and <tt>gir1.2-gdkx11-3.0 (= ${binary:Version})</tt> to indicate this. Ref: /usr/share/doc/gobject-introspection/policy.txt Tag: typelib-section-not-introspection diff --git a/checks/gir.pm b/checks/gir.pm index b64d19577..5001ea0b8 100644 --- a/checks/gir.pm +++ b/checks/gir.pm @@ -121,7 +121,8 @@ sub _run_binary { foreach my $typelib (@typelibs) { my $expected = 'gir1.2-' . lc($typelib->basename); $expected =~ s/\.typelib$//; - if ($pkg ne $expected) { + if ($pkg ne $expected + and not $info->relation('provides')->implies($expected)) { tag('typelib-package-name-does-not-match', $typelib, $expected); } } -- 2.15.0
>From 965fa362140c573ff0184ee7aa93b92fde3b685f Mon Sep 17 00:00:00 2001 From: Simon McVittie <s...@debian.org> Date: Sat, 11 Nov 2017 14:01:03 +0000 Subject: [PATCH 3/4] gir: -dev can Depend on a typelib that Provides the canonical name If gir1.2-foo-1.0 bundles typelibs for both Foo-1.0 and FooBar-1.0 (as seen in gir1.2-glib-2.0 and gir1.2-gtk-3.0), and the -dev package containing the GIR XML for Foo-1.0 and FooBar-1.0 depends on gir1.2-foo-1.0, then it is unnecessary to depend on gir1.2-foobar-1.0 as well. Signed-off-by: Simon McVittie <s...@debian.org> --- checks/gir.desc | 21 +++++++++++++-------- checks/gir.pm | 12 +++++++++++- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/checks/gir.desc b/checks/gir.desc index b154d6a88..2c5980af7 100644 --- a/checks/gir.desc +++ b/checks/gir.desc @@ -32,14 +32,19 @@ Info: Development packages that contain GObject-Introspection XML files (for example <tt>gir1.2-foo-23 (= ${binary:Version})</tt> when using debhelper). . - Please ignore and override this tag if the typelib is shipped in a package - whose name does not match the typelib's machine-readable name, and the - development package correctly depends on that package instead. For example, - <tt>gir1.2-glib-2.0</tt> is named for the <tt>GLib-2.0</tt> typelib, but - also contains the <tt>GObject-2.0</tt> and <tt>Gio-2.0</tt> typelibs, so - it is correct that <tt>libglib2.0-dev</tt> depends on - <tt>gir1.2-glib-2.0</tt> but not on <tt>gir1.2-gobject-2.0</tt> or - <tt>gir1.2-gio-2.0</tt>. + If multiple typelibs are shipped in the same package, then that package + should have versioned <tt>Provides</tt> for the names that would have been + used for separate packages. In this case, Lintian does not emit this tag + when a group of binary packages from the same source is checked together. + . + For example, <tt>libgtk-3-dev</tt> contains <tt>Gtk-3.0.gir</tt>, + <tt>Gdk-3.0.gir</tt> and <tt>GdkX11-3.0.gir</tt>. + <tt>gir1.2-gtk-3.0</tt> contains all three corresponding typelibs, + so it is sufficient for <tt>libgtk-3-dev</tt> to depend on + <tt>gir1.2-gtk-3.0</tt>. Giving <tt>gir1.2-gtk-3.0</tt> <tt>Provides</tt> + entries for <tt>gir1.2-gdk-3.0 (= ${binary:Version})</tt> + and <tt>gir1.2-gdkx11-3.0 (= ${binary:Version})</tt> signals this + situation to Lintian. Ref: /usr/share/doc/gobject-introspection/policy.txt Tag: typelib-package-name-does-not-match diff --git a/checks/gir.pm b/checks/gir.pm index 5001ea0b8..90d4ae134 100644 --- a/checks/gir.pm +++ b/checks/gir.pm @@ -109,10 +109,20 @@ sub _run_binary { } } - foreach my $gir (@girs) { + GIR: foreach my $gir (@girs) { my $expected = 'gir1.2-' . lc($gir->basename); $expected =~ s/\.gir$//; my $version = $info->field('version'); + + foreach my $bin ($group->get_binary_processables) { + next unless $bin->pkg_name =~ m/^gir1\.2-/; + my $other = $bin->pkg_name.' (= '.$bin->info->field('version').')'; + if ( $bin->info->relation('provides')->implies($expected) + and $info->relation('strong')->implies($other)) { + next GIR; + } + } + if (not $info->relation('strong')->implies("$expected (= $version)")) { tag('gir-missing-typelib-dependency', $gir, $expected); } -- 2.15.0
>From 7c12b7ea6526f5c412a599dafbd05bb00e1d70e9 Mon Sep 17 00:00:00 2001 From: Simon McVittie <s...@debian.org> Date: Sat, 11 Nov 2017 14:11:01 +0000 Subject: [PATCH 4/4] t/tests/gir: Add a test-case for bundling multiple related typelibs Signed-off-by: Simon McVittie <s...@debian.org> --- t/tests/gir/debian/debian/control.in | 1 + t/tests/gir/debian/debian/gir1.2-good-42.install | 1 + t/tests/gir/debian/debian/libgood-42-dev.install | 1 + t/tests/gir/debian/usr/lib/girepository-1.0/GoodExtras-42.typelib | 1 + t/tests/gir/debian/usr/share/gir-1.0/GoodExtras-42.gir | 1 + t/tests/gir/tags | 1 + 6 files changed, 6 insertions(+) create mode 100644 t/tests/gir/debian/usr/lib/girepository-1.0/GoodExtras-42.typelib create mode 100644 t/tests/gir/debian/usr/share/gir-1.0/GoodExtras-42.gir diff --git a/t/tests/gir/debian/debian/control.in b/t/tests/gir/debian/debian/control.in index 5e3b19237..4c1816727 100644 --- a/t/tests/gir/debian/debian/control.in +++ b/t/tests/gir/debian/debian/control.in @@ -20,6 +20,7 @@ Description: {$description} Package: gir1.2-good-42 Section: introspection Architecture: any +Provides: gir1.2-goodextras-42 (= $\{binary:Version\}) Depends: $\{gir:Depends\}, $\{shlibs:Depends\}, $\{misc:Depends\}, libgood-42-0 Description: {$description} - GIR This is a test package designed to exercise some feature or tag of diff --git a/t/tests/gir/debian/debian/gir1.2-good-42.install b/t/tests/gir/debian/debian/gir1.2-good-42.install index 5f80ac46e..5f1692f20 100644 --- a/t/tests/gir/debian/debian/gir1.2-good-42.install +++ b/t/tests/gir/debian/debian/gir1.2-good-42.install @@ -1 +1,2 @@ usr/lib/girepository-1.0/Good-42.typelib +usr/lib/girepository-1.0/GoodExtras-42.typelib diff --git a/t/tests/gir/debian/debian/libgood-42-dev.install b/t/tests/gir/debian/debian/libgood-42-dev.install index ae668960b..1bc5a2c48 100644 --- a/t/tests/gir/debian/debian/libgood-42-dev.install +++ b/t/tests/gir/debian/debian/libgood-42-dev.install @@ -1,2 +1,3 @@ usr/share/gir-1.0/Good-42.gir +usr/share/gir-1.0/GoodExtras-42.gir usr/lib/libgood-42-dev-dummy diff --git a/t/tests/gir/debian/usr/lib/girepository-1.0/GoodExtras-42.typelib b/t/tests/gir/debian/usr/lib/girepository-1.0/GoodExtras-42.typelib new file mode 100644 index 000000000..64fba428e --- /dev/null +++ b/t/tests/gir/debian/usr/lib/girepository-1.0/GoodExtras-42.typelib @@ -0,0 +1 @@ +not really a typelib diff --git a/t/tests/gir/debian/usr/share/gir-1.0/GoodExtras-42.gir b/t/tests/gir/debian/usr/share/gir-1.0/GoodExtras-42.gir new file mode 100644 index 000000000..59e267dd4 --- /dev/null +++ b/t/tests/gir/debian/usr/share/gir-1.0/GoodExtras-42.gir @@ -0,0 +1 @@ +not really GIR diff --git a/t/tests/gir/tags b/t/tests/gir/tags index 4350bd613..d358220e9 100644 --- a/t/tests/gir/tags +++ b/t/tests/gir/tags @@ -1,6 +1,7 @@ E: gir1.2-bad: typelib-in-arch-all-package usr/lib/girepository-1.0/Bad-23.typelib I: gir1.2-bad: typelib-not-in-multiarch-directory usr/lib/girepository-1.0/Bad-23.typelib usr/lib/${DEB_HOST_MULTIARCH}/girepository-1.0 I: gir1.2-good-42: typelib-not-in-multiarch-directory usr/lib/girepository-1.0/Good-42.typelib usr/lib/MULTIARCH/girepository-1.0 +I: gir1.2-good-42: typelib-not-in-multiarch-directory usr/lib/girepository-1.0/GoodExtras-42.typelib usr/lib/MULTIARCH/girepository-1.0 W: gir source: typelib-missing-gir-depends gir1.2-bad W: gir1.2-bad: gir-in-arch-all-package usr/share/gir-1.0/Bad-23.gir W: gir1.2-bad: gir-missing-typelib-dependency usr/share/gir-1.0/Bad-23.gir gir1.2-bad-23 -- 2.15.0