Package: debhelper Version: 11.2.1 Severity: minor Tags: patch Hi,
Thanks for maintaining and extending debhelper! When trying to test the new B-D: debhelper-compat (= 11) mechanism on my mdk and mdk-doc packages, I stumbled upon a minor issue: if this dependency is the first one listed, and it's on a separate line (there are no package names on the "Build-Depends:" line itself), then it is not recognized because the regular expression used will not match the whitespace before the "debhelper-compat" token. Attached is a trivial patch. Well, actually the trivial patch is in the second commit; the first one adds some debhelper-compat tests and the third one adds a test for the bug fixed by the second one. Of course, if you feel that adding test-only functions to the Dh_Lib module is not really proper, it's your call whether to accept just the fix itself without the tests. Thanks again for taking care of debhelper! Best regards, Peter -- System Information: Debian Release: buster/sid APT prefers testing-debug APT policy: (500, 'testing-debug'), (500, 'testing') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.15.0-3-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Init: systemd (via /run/systemd/system) Versions of packages debhelper depends on: ii autotools-dev 20180224.1 ii dh-autoreconf 17 ii dh-strip-nondeterminism 0.041-1 ii dpkg 1.19.0.5 ii dpkg-dev 1.19.0.5 ii file 1:5.32-2 ii libdpkg-perl 1.19.0.5 ii man-db 2.8.3-2 ii perl 5.26.2-3 ii po-debconf 1.0.20 debhelper recommends no packages. Versions of packages debhelper suggests: ii dh-make 2.201701 pn dwz <none> -- no debconf information
From 4680d18a5125ce6a46afa846e9b4866df0ce7a72 Mon Sep 17 00:00:00 2001 From: Peter Pentchev <r...@ringlet.net> Date: Fri, 4 May 2018 23:59:04 +0300 Subject: [PATCH 1/3] Lay the groundwork for testing debhelper-compat. Move the enumeration of the supported compat levels from gen-provides to the Dh_Lib module's compat_levels() function. Add the resetcompat() and resetpackages() testing aids to Dh_Lib. Silence the "debhelper-compat is experimental" warning during testing. Add the debhelper-compat/syntax.t test. --- debian/gen-provides | 6 +-- lib/Debian/Debhelper/Dh_Lib.pm | 28 ++++++++++- t/debhelper-compat/debian/control | 12 +++++ t/debhelper-compat/syntax.t | 78 +++++++++++++++++++++++++++++++ 4 files changed, 117 insertions(+), 7 deletions(-) create mode 100644 t/debhelper-compat/debian/control create mode 100755 t/debhelper-compat/syntax.t diff --git a/debian/gen-provides b/debian/gen-provides index 5efd5a98..714401f1 100644 --- a/debian/gen-provides +++ b/debian/gen-provides @@ -2,14 +2,10 @@ use strict; use warnings; -use Debian::Debhelper::Dh_Version; use Debian::Debhelper::Dh_Lib (); my @provides; -my $version = $Debian::Debhelper::Dh_Version::version; -$version =~ s/~.*//; # Drop backports marker -$version =~ s/^\d+\K\..*//; -for (my $i = Debian::Debhelper::Dh_Lib::LOWEST_NON_DEPRECATED_COMPAT_LEVEL ; $i <= $version ; $i++) { +for my $i (Debian::Debhelper::Dh_Lib::compat_levels) { push(@provides, "debhelper-compat (= $i)"); } print "dh:CompatLevels=" . join(", ", @provides) . "\n"; diff --git a/lib/Debian/Debhelper/Dh_Lib.pm b/lib/Debian/Debhelper/Dh_Lib.pm index 9c829f0f..9666b7ad 100644 --- a/lib/Debian/Debhelper/Dh_Lib.pm +++ b/lib/Debian/Debhelper/Dh_Lib.pm @@ -63,7 +63,7 @@ our (@EXPORT, %dh); &compute_doc_main_package &is_so_or_exec_elf_file &hostarch &assert_opt_is_known_package &dbgsym_tmpdir &find_hardlinks &should_use_root &gain_root_cmd DEFAULT_PACKAGE_TYPE - DBGSYM_PACKAGE_TYPE + DBGSYM_PACKAGE_TYPE &compat_levels &resetcompat &resetpackages ); # The Makefile changes this if debhelper is installed in a PREFIX. @@ -691,6 +691,12 @@ my $compat_from_bd; my $warned_compat = $ENV{DH_INTERNAL_TESTSUITE_SILENT_WARNINGS} ? 1 : 0; my $c; + # Used mainly for testing + sub resetcompat { + undef $c; + undef $compat_from_bd; + } + sub compat { my $num=shift; my $nowarn=shift; @@ -1388,6 +1394,13 @@ sub is_cross_compiling { my (%package_types, %package_arches, %package_multiarches, %packages_by_type, %package_sections, $sourcepackage, %package_cross_type); +# Resets the arrays; used mostly for testing +sub resetpackages { + undef $sourcepackage; + %package_types = %package_arches = %package_multiarches = + %packages_by_type = %package_sections = %package_cross_type = (); +} + # Returns source package name sub sourcepackage { getpackages() if not defined($sourcepackage); @@ -1489,7 +1502,7 @@ sub getpackages { } } } - if (defined($final_level)) { + if (defined($final_level) && !$ENV{DH_INTERNAL_TESTSUITE_SILENT_WARNINGS}) { warning("The use of \"debhelper-compat (= ${final_level})\" is experimental and may change (or be retired) without notice"); } $compat_from_bd = $final_level // -1; @@ -2386,4 +2399,15 @@ sub dbgsym_tmpdir { } } +sub compat_levels { + my $version; + eval { + require Debian::Debhelper::Dh_Version; + $version = $Debian::Debhelper::Dh_Version::version; + }; + $version =~ s/~.*//; # Drop backports marker + $version =~ s/^\d+\K\..*//; + return (LOWEST_NON_DEPRECATED_COMPAT_LEVEL..$version); +} + 1 diff --git a/t/debhelper-compat/debian/control b/t/debhelper-compat/debian/control new file mode 100644 index 00000000..1f18f4db --- /dev/null +++ b/t/debhelper-compat/debian/control @@ -0,0 +1,12 @@ +Source: foo +Section: misc +Priority: optional +Build-Depends: BUILD_DEPENDS +Maintainer: Test <testing@nowhere> +Rules-Requires-Root: no +Standards-Version: 3.9.8 + +Package: foo +Architecture: all +Description: package foo + Package foo diff --git a/t/debhelper-compat/syntax.t b/t/debhelper-compat/syntax.t new file mode 100755 index 00000000..0f711f5f --- /dev/null +++ b/t/debhelper-compat/syntax.t @@ -0,0 +1,78 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Test::More; + +use File::Basename qw(dirname); +use lib dirname(dirname(__FILE__)); +use Test::DH; + +use Debian::Debhelper::Dh_Lib qw(!dirname); + +my $TEST_DIR = dirname(__FILE__); + +sub test_build_depends { + my ($level, $build_depends) = @_; + my $dir = Test::DH::tempdir(CLEANUP => 1); + if (not mkdir("$dir/debian", 0777)) { + error("mkdir $dir/debian failed: $!"); + } + open my $in, '<', "$TEST_DIR/debian/control" or + error("open $TEST_DIR/debian/control failed: $!"); + open my $out, '>', "$dir/debian/control" or + error("open $dir/debian/control failed: $!"); + while (<$in>) { + s/BUILD_DEPENDS/$build_depends/; + print $out $_ or + error("write to $dir/debian/control failed: $!"); + } + close($out) or + error("close $dir/debian/control failed: $!"); + close($in); + + my $start_dir = Test::DH::cwd(); + chdir($dir) or error("chdir($dir): $!"); + + plan(tests => 5); + + local $ENV{DH_INTERNAL_TESTSUITE_SILENT_WARNINGS} = 1; + resetpackages; + resetcompat; + my @pkgs = getpackages; + ok(scalar @pkgs == 1); + ok($pkgs[0] eq 'foo'); + + ok(compat($level)); + ok(compat($level + 1)); + ok(!compat($level - 1)); + + chdir($start_dir) or + error("chdir($start_dir): $!"); +} + +my @levels = compat_levels; +plan(tests => scalar @levels); + +for my $level (@levels) { + subtest "compat $level" => sub { + plan(tests => 6); + subtest 'only' => sub { + test_build_depends($level, "debhelper-compat (= $level)"); + }; + subtest 'first' => sub { + test_build_depends($level, "debhelper-compat (= $level), bar"); + }; + subtest 'second' => sub { + test_build_depends($level, "bar, debhelper-compat (= $level)"); + }; + subtest 'first-nl' => sub { + test_build_depends($level, "debhelper-compat (= $level),\n bar"); + }; + subtest 'second-nl' => sub { + test_build_depends($level, "bar,\n debhelper-compat (= $level)"); + }; + subtest 'nl-second' => sub { + test_build_depends($level, "\n bar,\n debhelper-compat (= $level)"); + }; + }; +} -- 2.17.0
From 8cc0086067b77be6f3ac130a50e375c6c379e212 Mon Sep 17 00:00:00 2001 From: Peter Pentchev <r...@ringlet.net> Date: Sat, 5 May 2018 00:09:08 +0300 Subject: [PATCH 2/3] Allow whitespace before the debhelper-compat B-D. This allows a newline before the debhelper-compat dependency, e.g. when all the dependencies are listed on separate rows. --- lib/Debian/Debhelper/Dh_Lib.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Debian/Debhelper/Dh_Lib.pm b/lib/Debian/Debhelper/Dh_Lib.pm index 9666b7ad..dffd2fad 100644 --- a/lib/Debian/Debhelper/Dh_Lib.pm +++ b/lib/Debian/Debhelper/Dh_Lib.pm @@ -1467,7 +1467,7 @@ sub getpackages { my $value = join(' ', @{$bd_fields{$field}}); $value =~ s/\s*,\s*$//; for my $dep (split(/\s*,\s*/, $value)) { - if ($dep =~ m/^debhelper-compat\s*[(]\s*=\s*(${PKGVERSION_REGEX})\s*[)]$/) { + if ($dep =~ m/^\s*debhelper-compat\s*[(]\s*=\s*(${PKGVERSION_REGEX})\s*[)]$/) { my $version = $1; if ($version =~m/^(\d+)\D.*$/) { my $guessed_compat = $1; @@ -1483,7 +1483,7 @@ sub getpackages { error("The debhelper-compat build-dependency must be in the Build-Depends field (not $field)") if $field ne 'build-depends'; $dh_compat_bd = $dep; - } elsif ($dep =~ m/^debhelper-compat\s*(?:\S.*)?$/) { + } elsif ($dep =~ m/^\s*debhelper-compat\s*(?:\S.*)?$/) { my $clevel = "${\MAX_COMPAT_LEVEL}"; eval { require Debian::Debhelper::Dh_Version; -- 2.17.0
From dc869bf7e5e249b097da5f358a4535a2231b5a68 Mon Sep 17 00:00:00 2001 From: Peter Pentchev <r...@ringlet.net> Date: Sat, 5 May 2018 00:10:38 +0300 Subject: [PATCH 3/3] Test the "whitespace before debhelper-compat" case. --- t/debhelper-compat/syntax.t | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/t/debhelper-compat/syntax.t b/t/debhelper-compat/syntax.t index 0f711f5f..aaf37ccd 100755 --- a/t/debhelper-compat/syntax.t +++ b/t/debhelper-compat/syntax.t @@ -55,7 +55,7 @@ plan(tests => scalar @levels); for my $level (@levels) { subtest "compat $level" => sub { - plan(tests => 6); + plan(tests => 7); subtest 'only' => sub { test_build_depends($level, "debhelper-compat (= $level)"); }; @@ -71,6 +71,9 @@ for my $level (@levels) { subtest 'second-nl' => sub { test_build_depends($level, "bar,\n debhelper-compat (= $level)"); }; + subtest 'nl-first' => sub { + test_build_depends($level, "\n debhelper-compat (= $level),\n bar"); + }; subtest 'nl-second' => sub { test_build_depends($level, "\n bar,\n debhelper-compat (= $level)"); }; -- 2.17.0
signature.asc
Description: PGP signature