Package: lintian Version: 2.5.10.5 Tags: patch X-Debbugs-Cc: [email protected]
#708020 made me curious about why the libjavascript-minifier-xs-perl_0.09-1 source package doesn't trigger the 'versioned-dependency-satisfied-by-perl' tag. It turns out that private/refresh-perl-provides is rather simple minded about the mapping between CPAN and Debian version numbers. I expect this has caused a number of false negatives. We've since tackled very similar issues in the maintainer tests of the perl source package, where we check that the versioned Breaks of the binary packages make sense. The meat of the attached patch set is based on this work. Please consider these patches for Lintian. -- Niko Tyni [email protected]
>From 3c0cb4b01f15e46f13677c79a2f4e3e4a68c1f1c Mon Sep 17 00:00:00 2001 From: Niko Tyni <[email protected]> Date: Sun, 12 May 2013 22:33:24 +0300 Subject: [PATCH 1/5] Update the test suite to reflect libfile-temp-perl removal libfile-temp-perl is not currently in Debian unstable, so refreshing data/fields/perl-provides causes a test failure. Use libthreads-shared-perl instead in the hope it will stay separately packaged. --- t/tests/fields-depends-general/debian/debian/control.in | 2 +- t/tests/fields-depends-general/tags | 2 +- testset/relations/debian/control | 2 +- testset/tags.relations | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/t/tests/fields-depends-general/debian/debian/control.in b/t/tests/fields-depends-general/debian/debian/control.in index 7f78bfd..40fd0c9 100644 --- a/t/tests/fields-depends-general/debian/debian/control.in +++ b/t/tests/fields-depends-general/debian/debian/control.in @@ -9,7 +9,7 @@ Package: {$srcpkg} Architecture: {$architecture} Depends: $\{shlibs:Depends\}, $\{misc:Depends\}, xorg, bash, conflict-dep, gawk | awk, new-package | xbase-clients, {$srcpkg}, - gaim, emacs21, emacs22, makedev, libfile-temp-perl (>= 0.18), + gaim, emacs21, emacs22, makedev, libthreads-shared-perl (>= 1.29), packaging-dev, xfont-a Breaks: package-without-version, {$srcpkg} (<< 0.1), replaced-wo-version diff --git a/t/tests/fields-depends-general/tags b/t/tests/fields-depends-general/tags index fedbc28..8d0f243 100644 --- a/t/tests/fields-depends-general/tags +++ b/t/tests/fields-depends-general/tags @@ -16,5 +16,5 @@ W: fields-depends-general: depends-on-old-emacs depends: emacs21 W: fields-depends-general: depends-on-old-emacs depends: emacs22 W: fields-depends-general: depends-on-packaging-dev depends W: fields-depends-general: package-relation-with-self breaks: fields-depends-general (<< 0.1) -W: fields-depends-general: versioned-dependency-satisfied-by-perl depends: libfile-temp-perl (>= 0.18) +W: fields-depends-general: versioned-dependency-satisfied-by-perl depends: libthreads-shared-perl (>= 1.29) W: libfields-depends-general: lib-recommends-documentation recommends: debconf-doc diff --git a/testset/relations/debian/control b/testset/relations/debian/control index 4d226c7..a4c4834 100644 --- a/testset/relations/debian/control +++ b/testset/relations/debian/control @@ -17,7 +17,7 @@ Package: relations Architecture: all Section: contrib/misc Pre-Depends: awk|gawk -Depends: relations(<< 3), dpkg, bash (>> 2.0 ), mail-transport-agent, gawk | awk, foo (>> 2.0), foo (<< 2.2), coreutils, ,null (>= 0), ${misc:Depends}, makedev, libfile-temp-perl (>= 0.18) +Depends: relations(<< 3), dpkg, bash (>> 2.0 ), mail-transport-agent, gawk | awk, foo (>> 2.0), foo (<< 2.2), coreutils, ,null (>= 0), ${misc:Depends}, makedev, libthreads-shared-perl (>= 1.29) Provides: mail-reader Replaces: relations Conflicts: foobar (<< 5+5), foo, relations, diff --git a/testset/tags.relations b/testset/tags.relations index aee95e4..6813270 100644 --- a/testset/tags.relations +++ b/testset/tags.relations @@ -62,6 +62,6 @@ W: relations: depends-on-old-emacs recommends: emacs21 W: relations: package-relation-with-self depends: relations (<< 3) W: relations: redundant-bugs-field W: relations: redundant-origin-field -W: relations: versioned-dependency-satisfied-by-perl depends: libfile-temp-perl (>= 0.18) +W: relations: versioned-dependency-satisfied-by-perl depends: libthreads-shared-perl (>= 1.29) W: relations: virtual-package-depends-without-real-package-depends depends: mail-transport-agent W: relations: virtual-package-depends-without-real-package-depends pre-depends: awk -- 1.7.10.4
>From fac81188d9225b288818be5c44532a1a0df95476 Mon Sep 17 00:00:00 2001 From: Niko Tyni <[email protected]> Date: Sun, 12 May 2013 22:38:01 +0300 Subject: [PATCH 2/5] Refreshed perl-provides against current unstable --- data/fields/perl-provides | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/data/fields/perl-provides b/data/fields/perl-provides index 530f760..6464a66 100644 --- a/data/fields/perl-provides +++ b/data/fields/perl-provides @@ -8,11 +8,12 @@ # in the lintian source tree # # last updated for PERL_VERSION=5.014002 -libtime-piece-perl 1.20.01 +libsocket-perl 1.94 libthreads-shared-perl 1.37 libthreads-perl 1.83 libsys-syslog-perl 0.27 libio-compress-perl 2.033 +libio-compress-base-perl 2.033 libencode-perl 2.42.01 libdigest-sha-perl 5.61 libdevel-dprof-perl 20110228.00 @@ -21,7 +22,6 @@ libcompress-raw-bzip2-perl 2.033 libversion-requirements-perl 0.101020 libversion-perl 0.88 libunicode-collate-perl 0.73 -libtime-local-perl 1.2000 libthread-queue-perl 2.12 libtest-simple-perl 0.98 libtest-harness-perl 3.23 @@ -29,22 +29,16 @@ libshell-perl 0.72.01 libpod-simple-perl 3.16 libperl-ostype-perl 1.002 libparse-cpan-meta-perl 1.4401 -libparent-perl 0.225 -libmodule-pluggable-perl 3.9 libmodule-metadata-perl 1.000004 libmodule-load-conditional-perl 0.44 libmodule-corelist-perl 2.49.02 libmodule-build-perl 0.3800 libmath-complex-perl 1.56 libmath-bigint-perl 1.994 -liblocale-maketext-simple-perl 0.21 libjson-pp-perl 2.27105 libhttp-tiny-perl 0.012 -libfile-temp-perl 0.22 libfile-spec-perl 3.33 -libfile-path-perl 2.08.01 libextutils-parsexs-perl 2.2210 -libextutils-command-perl 1.17 libextutils-cbuilder-perl 0.280203 libdigest-perl 1.16 libcpan-meta-yaml-perl 0.003 -- 1.7.10.4
>From 6e12ed0474c249d7a7a2a9635b446be728b2e084 Mon Sep 17 00:00:00 2001 From: Niko Tyni <[email protected]> Date: Sun, 12 May 2013 22:01:36 +0300 Subject: [PATCH 3/5] Improve the version information of packages bundled with the Perl core There are various incompatibilities with the CPAN and Debian versioning schemes. Try to be smarter about deriving Debian version numbers from Module::CoreList data, taking epochs and varying number of decimal digits into account. Most of this code is reused from the Debian maintainer tests of the Perl package (debian/t/control.t in the 'perl' source package, 5.14.2-21 or so at the time of this writing.) --- private/refresh-perl-provides | 74 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 7 deletions(-) diff --git a/private/refresh-perl-provides b/private/refresh-perl-provides index a31d53b..b995292 100755 --- a/private/refresh-perl-provides +++ b/private/refresh-perl-provides @@ -85,17 +85,25 @@ for my $pkg (@core_packages) { my $name = $provides->{Name}; # skip virtual-only packages next if (!$cache->{$name}{VersionList}); - my $version = find_core_version($name); - next if !$version; + my $cpan_version = find_core_version($name); - # the underscore notates a CPAN development version; - # these may need special casing with some packages - $version =~ s/_/./g; - print "$name $version\n"; + next if !$cpan_version; + + # the number of digits is a pain + # we use the current version in the Debian archive to determine + # how many we need + # the epoch is easier, we just copy it + + my ($epoch, $digits) = epoch_and_digits($name); + my $debian_version = cpan_version_to_deb($cpan_version, $epoch, $digits); + + next if !$debian_version; + + print "$name $debian_version\n"; } } -# look up the version of a package in the core +# look up the CPAN version of a package in the core sub find_core_version { my $module = shift; my $ret; @@ -118,6 +126,58 @@ sub find_core_version { return $ret; } +sub cpan_version_to_deb { + my $cpan_version = shift; + my $epoch = shift || ''; + my $digits = shift; + + # cpan_version + # digits + # result + # 1.15_02, 2 => 1.15.02 + # 1.15_02, 4 => 1.1502 + # 1.15_02, 0 => 1.15.02 + # + # 1.15_021, 2 => 1.15.021 + # 1.15_021, 4 => 1.1500.021 + # 1.15_021, 0 => 1.15.021 + # + # 1.15, 1 => 1.15 + # 1.15, 2 => 1.15 + # 1.15, 4 => 1.1500 + # 1.15, 0 => 1.15 + + # split 1.15_02 to (1, 15, 02) + my ($major, $prefix, $suffix) = ($cpan_version =~ /^(\d+\.)(\d+)(?:_(\d+))?$/); + die("no match with $cpan_version?") if !$major; + + $suffix ||= ''; + if (length($suffix) + length($prefix) == $digits) { + $prefix .= $suffix; + $suffix = ''; + } + if (length($suffix) + length($prefix) < $digits) { + $prefix .= '0' while length($prefix) < $digits; + } + $suffix = ".$suffix" if $suffix ne ''; + $epoch.$major.$prefix.$suffix; +} + +# Given a Debian binary package name, look up its latest version +# and return its epoch (including the colon) if available, and +# the number of digits in its decimal part +sub epoch_and_digits { + my $p = shift; + return (0, 0) if !exists $cache->{$p}; + return (0, 0) if !exists $cache->{$p}{VersionList}; # virtual package + my $latest = bin_latest($cache->{$p}); + my $v = $latest->{VerStr}; + $v =~ s/\+dfsg//; + my ($epoch, $major, $prefix, $suffix, $revision) = + ($v =~ /^(?:(\d+:))?((?:\d+\.))+(\d+)(?:_(\d+))?(-[^-]+)$/); + return ($epoch, length $prefix); +} + sub bin_latest { my $p = shift; return (sort bin_byversion @{$p->{VersionList}})[-1]; -- 1.7.10.4
>From a673455a1ac93f27a175020b02d8efd3d9f1770a Mon Sep 17 00:00:00 2001 From: Niko Tyni <[email protected]> Date: Sun, 12 May 2013 22:39:03 +0300 Subject: [PATCH 4/5] Refreshed perl-provides with the improved versioning logic --- data/fields/perl-provides | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/data/fields/perl-provides b/data/fields/perl-provides index 6464a66..710c465 100644 --- a/data/fields/perl-provides +++ b/data/fields/perl-provides @@ -8,7 +8,7 @@ # in the lintian source tree # # last updated for PERL_VERSION=5.014002 -libsocket-perl 1.94 +libsocket-perl 1.940 libthreads-shared-perl 1.37 libthreads-perl 1.83 libsys-syslog-perl 0.27 @@ -20,7 +20,7 @@ libdevel-dprof-perl 20110228.00 libcompress-raw-zlib-perl 2.033 libcompress-raw-bzip2-perl 2.033 libversion-requirements-perl 0.101020 -libversion-perl 0.88 +libversion-perl 1:0.8800 libunicode-collate-perl 0.73 libthread-queue-perl 2.12 libtest-simple-perl 0.98 @@ -32,13 +32,13 @@ libparse-cpan-meta-perl 1.4401 libmodule-metadata-perl 1.000004 libmodule-load-conditional-perl 0.44 libmodule-corelist-perl 2.49.02 -libmodule-build-perl 0.3800 +libmodule-build-perl 0.380000 libmath-complex-perl 1.56 libmath-bigint-perl 1.994 libjson-pp-perl 2.27105 libhttp-tiny-perl 0.012 -libfile-spec-perl 3.33 -libextutils-parsexs-perl 2.2210 +libfile-spec-perl 3.3300 +libextutils-parsexs-perl 2.221000 libextutils-cbuilder-perl 0.280203 libdigest-perl 1.16 libcpan-meta-yaml-perl 0.003 -- 1.7.10.4
>From 2d5359968951ac2ebc3caa3af06025d150cf04b3 Mon Sep 17 00:00:00 2001 From: Niko Tyni <[email protected]> Date: Mon, 13 May 2013 20:40:19 +0300 Subject: [PATCH 5/5] Augment the test suite for the improved perl-provides logic libmodule-build-perl in squeeze was 0.360700, but the old versioning logic erroneously compared against 0.3607, resulting in a false negative. --- t/tests/fields-depends-general/debian/debian/control.in | 2 +- t/tests/fields-depends-general/tags | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/t/tests/fields-depends-general/debian/debian/control.in b/t/tests/fields-depends-general/debian/debian/control.in index 40fd0c9..74f7980 100644 --- a/t/tests/fields-depends-general/debian/debian/control.in +++ b/t/tests/fields-depends-general/debian/debian/control.in @@ -3,7 +3,7 @@ Priority: extra Section: {$section} Maintainer: {$author} Standards-Version: {$standards_version} -Build-Depends: debhelper (>= 9) +Build-Depends: debhelper (>= 9), libmodule-build-perl (>= 0.360700) Package: {$srcpkg} Architecture: {$architecture} diff --git a/t/tests/fields-depends-general/tags b/t/tests/fields-depends-general/tags index 8d0f243..87f38fd 100644 --- a/t/tests/fields-depends-general/tags +++ b/t/tests/fields-depends-general/tags @@ -9,6 +9,7 @@ E: py-fields-depends-general: depends-on-python-minimal depends I: fields-depends-general: conflicts-with-version package-with-version (<< 3.0) I: fields-depends-general: ored-depends-on-obsolete-package depends: xbase-clients W: fields-depends-general source: package-depends-on-itself fields-depends-general depends +W: fields-depends-general source: versioned-dependency-satisfied-by-perl build-depends: libmodule-build-perl (>= 0.360700) W: fields-depends-general-doc: doc-package-depends-on-main-package depends W: fields-depends-general: breaks-without-version package-without-version W: fields-depends-general: depends-exclusively-on-makedev depends -- 1.7.10.4

