Bug#605012: lintian: Add check for missing build-arch and build-indep targets in debian/rules
Package: lintian
Version: 2.4.4
Severity: normal
Tags: patch
The attached patch adds a new tag
(debian-rules-missing-recommended-target) which checks for missing but
recommended targets in debian/rules; it's based upon the existing
debian-rules-missing-required-target check. I've updated the testsuite
as well. This is my first patch for lintian, so I may not have done
everything 100% correctly, particularly WRT the testsuite, but I think
it's good.
Why is this needed? We've wanted to get more widespread usage of the
build-arch and build-indep targets for some time (over six years), but
have not to date succeeded very well at this (#218893, #604397, #398625
and its duplicates, #229357). This is indended to push for adoption more
actively.
This isn't attempting to address the more contentious issues to enable
the use of these targets, such as control Build-Options flags, where
there is not universal consensus (this is the primary sticking point).
There is consensus on the need for having these targets, which this
does address. These two aspects of the problem aren't directly
coupled, and adding the targets now is not an issue. If you look at
the bug reports above, you'll see that work has been done to allow
reliable target detection in Makefiles, which would enable
dpkg-buildpackage to invoke build-arch and/or build-indep if present,
or else fall back to build, in which case the need for Build-Options
becomes moot.
We now have full support for build-arch and build-indep in cdbs and
patches for support in dh (#604563) which together give ~50% archive
coverage. This change is to get more widespread coverage in the
remaining 50% of the archive, with the ultimate goal being 100%
coverage and making the targets required rather than recommended.
Thanks,
Roger
-- System Information:
Debian Release: squeeze/sid
APT prefers unstable
APT policy: (550, 'unstable'), (400, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.36-trunk-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages lintian depends on:
ii binutils 2.20.1-15 The GNU assembler, linker and bina
ii diffstat 1.53-1 produces graph of changes introduc
ii dpkg-dev 1.15.8.6 Debian package development tools
ii file 5.04-5 Determines file type using "magic"
ii gettext 0.18.1.1-3 GNU Internationalization utilities
ii intltool-debian 0.35.0+20060710.1 Help i18n of RFC822 compliant conf
ii libapt-pkg-perl 0.1.24+b1 Perl interface to libapt-pkg
ii libclass-accessor-perl 0.34-1 Perl module that automatically gen
ii libipc-run-perl 0.89-1 Perl module for running processes
ii libparse-debianchangel 1.1.1-2.1 parse Debian changelogs and output
ii libtimedate-perl 1.2000-1 collection of modules to manipulat
ii liburi-perl 1.56-1 module to manipulate and access UR
ii locales 2.11.2-7 Embedded GNU C Library: National L
ii locales-all [locales] 2.11.2-7 Embedded GNU C Library: Precompile
ii man-db 2.5.7-6 on-line manual pager
ii perl [libdigest-sha-pe 5.10.1-16 Larry Wall's Practical Extraction
lintian recommends no packages.
Versions of packages lintian suggests:
pn binutils-multiarch <none> (no description available)
ii libtext-template-perl 1.45-1 Text::Template perl module
ii man-db 2.5.7-6 on-line manual pager
-- no debconf information
>From 17a32ac63fbc6a9c6e1c3ab9be043d6e6de6a92a Mon Sep 17 00:00:00 2001
From: Roger Leigh <rleigh@debian.org>
Date: Fri, 26 Nov 2010 09:54:28 +0000
Subject: [PATCH] Add check for missing build-arch and build-indep targets in debian/rules
Add new check (tag debian-rules-missing-recommended-target)
Update testsuite
Signed-off-by: Roger Leigh <rleigh@debian.org>
---
checks/rules | 13 ++++++++++++
checks/rules.desc | 21 ++++++++++++++++++++
t/tests/debhelper-deprecated/debian/debian/rules | 6 +++-
.../debian/debian/rules | 6 +++-
.../debhelper-dh-clean-k-ok/debian/debian/rules | 6 +++-
t/tests/debhelper-dh-depends/debian/debian/rules | 5 +++-
.../debian/debian/rules | 6 +++-
t/tests/fields-quilt-debhelper/debian/debian/rules | 10 +++++---
t/tests/generic-empty/desc | 1 +
t/tests/generic-empty/tags | 2 +
testset/binary/debian/rules | 6 +++-
testset/debconf/debian/rules | 11 ++++++++-
testset/debug/debian/rules | 9 ++++++-
testset/etcfiles/debian/rules | 3 ++
testset/fields/debian/rules | 8 +++++-
testset/filenames/debian/rules | 9 ++++++-
testset/foo++/debian/rules | 8 +++++-
testset/libbaz/debian/rules | 10 ++++++--
testset/maintainer-scripts/debian/rules | 8 +++++-
testset/relations/debian/rules | 8 +++++-
testset/scripts/debian/rules | 9 ++++++-
testset/tags.binary | 1 +
testset/tags.etcfiles | 1 +
23 files changed, 133 insertions(+), 34 deletions(-)
diff --git a/checks/rules b/checks/rules
index 358db41..126c8e2 100644
--- a/checks/rules
+++ b/checks/rules
@@ -88,6 +88,10 @@ my @RULE_CLEAN_DEPENDS =
my %required = map { $_ => 1 }
qw(build binary binary-arch binary-indep clean);
+# The following targets are recommended per Policy.
+my %recommended = map { $_ => 1 }
+ qw(build-arch build-indep);
+
# Rules about required debhelper command ordering. Each command is put into a
# class and the tag is issued if they're called in the wrong order for the
# classes. Unknown commands won't trigger this flag.
@@ -208,6 +212,7 @@ while (<RULES>) {
my @targets = split (' ', $1);
for (@targets) {
$seen{$_}++ if $required{$_};
+ $seen{$_}++ if $recommended{$_};
}
}
@@ -225,8 +230,12 @@ while (<RULES>) {
for my $required (keys %required) {
$seen{$required}++ if $required =~ m/$pattern/;
}
+ for my $recommended (keys %recommended) {
+ $seen{$recommended}++ if $recommended =~ m/$pattern/;
+ }
} else {
$seen{$target}++ if $required{$target};
+ $seen{$target}++ if $recommended{$target};
}
if (grep { $target =~ /$_/ } @arch_rules) {
push (@arch_rules, @depends);
@@ -292,6 +301,10 @@ unless ($includes) {
tag "debian-rules-missing-required-target", $target
unless $seen{$target};
}
+ for my $target (sort keys %recommended) {
+ tag "debian-rules-missing-recommended-target", $target
+ unless $seen{$target};
+ }
}
# Make sure we have no content for binary-arch if we are arch-indep:
diff --git a/checks/rules.desc b/checks/rules.desc
index 7dd263f..809f8b0 100644
--- a/checks/rules.desc
+++ b/checks/rules.desc
@@ -35,6 +35,27 @@ Info: The <tt>debian/rules</tt> file for this package does not provide one
binary-indep, and clean must be provided, even if they don't do anything
for this package.
+Tag: debian-rules-missing-recommended-target
+Severity: normal
+Certainty: certain
+Ref: policy 4.9
+Info: The <tt>debian/rules</tt> file for this package does not provide
+ one of the recommended targets. All of build-arch and build-indep
+ should be provided, even if they don't do anything for this package.
+ If this package does not currently split building of architecture
+ dependent and independent packages, the following rules may be added
+ to fall back to the binary target.
+ .
+ binary-arch: binary
+ binary-indep: binary
+ .
+ Note that the following form is recommended however:
+ .
+ binary: binary-arch binary-indep
+ .
+ These targets will be required by policy in the future, so should be
+ added to prevent future breakage.
+
Tag: debian-rules-uses-pwd
Severity: normal
Certainty: certain
diff --git a/t/tests/debhelper-deprecated/debian/debian/rules b/t/tests/debhelper-deprecated/debian/debian/rules
index 7ec4692..f75cfb6 100755
--- a/t/tests/debhelper-deprecated/debian/debian/rules
+++ b/t/tests/debhelper-deprecated/debian/debian/rules
@@ -2,7 +2,9 @@
pkg = $(shell dh_listpackages)
-build:
+build: build-indep build-arch
+build-arch:
+build-indep:
clean:
dh_testdir
@@ -37,4 +39,4 @@ endif
dh_md5sums
dh_builddeb
-.PHONY: binary binary-arch binary-indep build clean
+.PHONY: build-arch build-indep build binary binary-arch binary-indep clean
diff --git a/t/tests/debhelper-dh-clean-k-deprecated/debian/debian/rules b/t/tests/debhelper-dh-clean-k-deprecated/debian/debian/rules
index 488e728..bd004e3 100755
--- a/t/tests/debhelper-dh-clean-k-deprecated/debian/debian/rules
+++ b/t/tests/debhelper-dh-clean-k-deprecated/debian/debian/rules
@@ -6,7 +6,9 @@
pkg = $(shell dh_listpackages)
-build:
+build: build-arch build-indep
+build-arch:
+build-indep:
clean:
dh_testdir
@@ -32,4 +34,4 @@ binary-indep:
dh_md5sums
dh_builddeb
-.PHONY: binary binary-arch binary-indep build clean
+.PHONY: build-arch build-indep build binary binary-arch binary-indep clean
diff --git a/t/tests/debhelper-dh-clean-k-ok/debian/debian/rules b/t/tests/debhelper-dh-clean-k-ok/debian/debian/rules
index 488e728..243e5c2 100755
--- a/t/tests/debhelper-dh-clean-k-ok/debian/debian/rules
+++ b/t/tests/debhelper-dh-clean-k-ok/debian/debian/rules
@@ -6,7 +6,9 @@
pkg = $(shell dh_listpackages)
-build:
+build: build-indep build-arch
+build-arch:
+build-indep:
clean:
dh_testdir
@@ -32,4 +34,4 @@ binary-indep:
dh_md5sums
dh_builddeb
-.PHONY: binary binary-arch binary-indep build clean
+.PHONY: build-arch build-indep build binary binary-arch binary-indep clean
diff --git a/t/tests/debhelper-dh-depends/debian/debian/rules b/t/tests/debhelper-dh-depends/debian/debian/rules
index 1c04f36..803501b 100755
--- a/t/tests/debhelper-dh-depends/debian/debian/rules
+++ b/t/tests/debhelper-dh-depends/debian/debian/rules
@@ -1,6 +1,9 @@
#!/usr/bin/make -f
-build: build-stamp
+build: build-arch build-indep
+build-arch:
+build-indep: build-stamp
+
build-stamp:
dh_testdir
dh_auto_configure
diff --git a/t/tests/debhelper-script-token-unneeded/debian/debian/rules b/t/tests/debhelper-script-token-unneeded/debian/debian/rules
index bbd9fb3..ee51749 100755
--- a/t/tests/debhelper-script-token-unneeded/debian/debian/rules
+++ b/t/tests/debhelper-script-token-unneeded/debian/debian/rules
@@ -6,7 +6,9 @@
pkg = $(shell dh_listpackages)
-build:
+build: build-indep build-arch
+build-indep:
+build-arch:
clean:
dh_testdir
@@ -31,4 +33,4 @@ binary-indep:
dh_md5sums
dh_builddeb
-.PHONY: binary binary-arch binary-indep build clean
+.PHONY: build-arch build-indep build binary binary-arch binary-indep clean
diff --git a/t/tests/fields-quilt-debhelper/debian/debian/rules b/t/tests/fields-quilt-debhelper/debian/debian/rules
index d893de8..da794bd 100755
--- a/t/tests/fields-quilt-debhelper/debian/debian/rules
+++ b/t/tests/fields-quilt-debhelper/debian/debian/rules
@@ -1,6 +1,8 @@
#!/usr/bin/make -f
-build:
+build: build-arch build-indep
+build-arch:
+build-indep:
dh_quilt_patch
clean:
@@ -17,8 +19,8 @@ install: build
dh_install
binary: binary-indep binary-arch
-binary-arch: build install
-binary-indep: build install
+binary-arch: build-arch install
+binary-indep: build-indep install
dh_testdir
dh_testroot
dh_installchangelogs
@@ -31,4 +33,4 @@ binary-indep: build install
dh_md5sums
dh_builddeb
-.PHONY: build clean binary-indep binary-arch binary install
+.PHONY: build-arch build-indep build clean binary-indep binary-arch binary install
diff --git a/t/tests/generic-empty/desc b/t/tests/generic-empty/desc
index a994997..9d4aef9 100644
--- a/t/tests/generic-empty/desc
+++ b/t/tests/generic-empty/desc
@@ -8,6 +8,7 @@ Test-For:
changed-by-address-missing
changelog-should-mention-nmu
debian-rules-missing-required-target
+ debian-rules-missing-recommended-target
maintainer-address-missing
maintainer-not-full-name
no-copyright-file
diff --git a/t/tests/generic-empty/tags b/t/tests/generic-empty/tags
index d6742e1..2acd3a2 100644
--- a/t/tests/generic-empty/tags
+++ b/t/tests/generic-empty/tags
@@ -9,6 +9,8 @@ E: generic-empty_1.0_arch changes: bad-urgency-in-changes-file unknown
E: generic-empty_1.0_arch changes: changed-by-address-malformed a <>
E: generic-empty_1.0_arch changes: changed-by-address-missing a <>
W: generic-empty source: changelog-should-mention-nmu
+W: generic-empty source: debian-rules-missing-recommended-target build-arch
+W: generic-empty source: debian-rules-missing-recommended-target build-indep
W: generic-empty source: maintainer-not-full-name a
W: generic-empty source: no-section-field-for-source
W: generic-empty source: source-nmu-has-incorrect-version-number 1.0
diff --git a/testset/binary/debian/rules b/testset/binary/debian/rules
index be68ea0..08dd671 100755
--- a/testset/binary/debian/rules
+++ b/testset/binary/debian/rules
@@ -4,10 +4,12 @@ tmp=debian/tmp
# This reference to $(PWD) should not cause an error but the one below
# should.
-build:
+build-arch:
make
echo $(PWD)
+build: build-arch
+
clean:
make -i clean
rm -f debian/files debian/substvars
@@ -88,4 +90,4 @@ binary-arch: build
binary: binary-arch
-.PHONY: build binary-arch binary clean
+.PHONY: build-arch build binary-arch binary clean
diff --git a/testset/debconf/debian/rules b/testset/debconf/debian/rules
index 4cedfcd..65d283b 100755
--- a/testset/debconf/debian/rules
+++ b/testset/debconf/debian/rules
@@ -6,10 +6,17 @@ deb_dir = debian/debconf
udeb_dir = debian/debconf-udeb
build_dirs = $(deb_dir) $(udeb_dir)
-build:
+build-indep:
+# There are no architecture-independent files to be built
+# by this package. If there were any they would be made
+# here.
+
+build-arch:
dh_testdir
touch build
+build: build-indep build-arch
+
clean:
dh_testdir
dh_testroot
@@ -56,4 +63,4 @@ binary-arch: build
binary: binary-indep binary-arch
-.PHONY: binary binary-arch binary-indep clean checkroot
+.PHONY: build-arch build-indep build binary binary-arch binary-indep clean checkroot
diff --git a/testset/debug/debian/rules b/testset/debug/debian/rules
index 26e777e..b4e68e2 100755
--- a/testset/debug/debian/rules
+++ b/testset/debug/debian/rules
@@ -4,7 +4,10 @@
export DH_COMPAT := 5
-build: build-stamp
+build-indep:
+
+build-arch: build-stamp
+
build-stamp:
dh_testdir
gcc -D_REENTRANT -fPIC -c libhello.c
@@ -13,6 +16,8 @@ build-stamp:
gcc -o hello hello.c -L. -lhello
touch build-stamp
+build: build-arch build-indep
+
clean:
dh_testdir
dh_testroot
@@ -86,4 +91,4 @@ binary-arch: build-stamp install
binary-indep:
binary: binary-indep binary-arch
-.PHONY: binary binary-indep binary-arch build clean install
+.PHONY: build-arch build-indep build binary binary-indep binary-arch clean install
diff --git a/testset/etcfiles/debian/rules b/testset/etcfiles/debian/rules
index 60eb147..4434415 100755
--- a/testset/etcfiles/debian/rules
+++ b/testset/etcfiles/debian/rules
@@ -9,6 +9,9 @@ clean:
rm -rf debian/only-etcfiles
build:
+build-arch:
+build-indep:
+build-indep:
binary-indep:
install -d $(tmp)/etc
install -m 644 proper $(tmp)/etc
diff --git a/testset/fields/debian/rules b/testset/fields/debian/rules
index eb139f3..2d74d8b 100755
--- a/testset/fields/debian/rules
+++ b/testset/fields/debian/rules
@@ -2,7 +2,11 @@
tmp=debian/tmp
-build:
+build-arch:
+
+build-indep:
+
+build: build-arch build-indep
binary-arch:
@@ -26,4 +30,4 @@ binary: binary-arch binary-indep
clean:
rm -rf debian/files $(tmp) debian/substvars
-.PHONY: build binary-arch binary-indep binary clean
+.PHONY: build-arch build-indep build binary-arch binary-indep binary clean
diff --git a/testset/filenames/debian/rules b/testset/filenames/debian/rules
index f77a857..3dacf6d 100755
--- a/testset/filenames/debian/rules
+++ b/testset/filenames/debian/rules
@@ -27,7 +27,12 @@ clean:
touch "files/'\\ "
touch filenames.c~
-build:
+build-arch:
+
+build-indep:
+
+build: build-arch build-indep
+
binary-arch:
@@ -232,4 +237,4 @@ binary-indep:
binary: binary-arch binary-indep
-.PHONY: build binary-arch binary-indep binary clean
+.PHONY: build-indep build-arch build binary-arch binary-indep binary clean
diff --git a/testset/foo++/debian/rules b/testset/foo++/debian/rules
index d769f80..b04bd36 100755
--- a/testset/foo++/debian/rules
+++ b/testset/foo++/debian/rules
@@ -3,7 +3,11 @@
foo=foo++
helper=foo++-helper
-build:
+build-arch:
+
+build-indep:
+
+build: build-arch build-indep
binary-arch:
@@ -29,4 +33,4 @@ binary: binary-arch binary-indep
clean:
-.PHONY: build binary-arch binary-indep binary clean
+.PHONY: build-arch build-indep build binary-arch binary-indep binary clean
diff --git a/testset/libbaz/debian/rules b/testset/libbaz/debian/rules
index 8ed2bb0..65cec1b 100755
--- a/testset/libbaz/debian/rules
+++ b/testset/libbaz/debian/rules
@@ -6,9 +6,13 @@ dev_tmp=debian/tmp-dev
LIB=libbaz1
DEV=libbaz1-dev
-build:
+build-arch:
$(MAKE)
+build-indep:
+
+build: build-arch build-indep
+
clean:
$(MAKE) clean
dh_clean -plibbaz2 -plibbaz2-dev
@@ -57,7 +61,7 @@ binary-correct:
dh_builddeb -plibbaz2 -plibbaz2-dev -plibbaz2-dbg -pia32-libbaz2
# and the incorrect one
-binary-arch: build binary-correct
+binary-arch: build-arch binary-correct
# first, the lib package
install -d $(lib_tmp)/usr/lib
# resp. no soname (check), wrong soname (check), and no-pic (check)
@@ -120,4 +124,4 @@ binary: binary-arch
# The mention of binary-indep here should be sufficient to suppress the
# warning that it's not present.
-.PHONY: build binary-arch binary-indep binary clean
+.PHONY: build-arch build-indep build binary-arch binary-indep binary clean
diff --git a/testset/maintainer-scripts/debian/rules b/testset/maintainer-scripts/debian/rules
index 98240ed..f1f4075 100755
--- a/testset/maintainer-scripts/debian/rules
+++ b/testset/maintainer-scripts/debian/rules
@@ -1,6 +1,10 @@
#!/usr/bin/make -f
-build:
+build-arch:
+
+build-indep:
+
+build: build-arch build-indep
binary-arch:
@@ -29,4 +33,4 @@ clean2:
dh_clean
clean3:
-.PHONY: build binary-arch binary-indep binary clean
+.PHONY: build-arch build-indep build binary-arch binary-indep binary clean
diff --git a/testset/relations/debian/rules b/testset/relations/debian/rules
index 722be9b..76ef605 100755
--- a/testset/relations/debian/rules
+++ b/testset/relations/debian/rules
@@ -18,7 +18,11 @@
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301, USA.
-build:
+build-arch:
+
+build-indep:
+
+build: build-arch build-indep
binary-arch:
@@ -45,4 +49,4 @@ clean::
# Test requiring perl Build-Depends for manual perl invocations.
[ ! -f Build ] || $(PERL) Build distclean
-.PHONY: build binary-arch binary-indep binary clean
+.PHONY: build-arch build-indep build binary-arch binary-indep binary clean
diff --git a/testset/scripts/debian/rules b/testset/scripts/debian/rules
index 3a4ab8c..e90d227 100755
--- a/testset/scripts/debian/rules
+++ b/testset/scripts/debian/rules
@@ -2,7 +2,12 @@
tmp=debian/tmp
-build:
+build-arch:
+ echo "Hi, in an arch: all package, I am a bug!"
+
+build-indep:
+
+build: build-arch build-indep
binary-arch:
echo "Hi, in an arch: all package, I am a bug!"
@@ -99,4 +104,4 @@ binary: binary-arch binary-indep
clean:
rm -rf debian/files $(tmp) debian/substvars
-.PHONY: build binary-arch binary-indep binary clean
+.PHONY: build-arch build-indep build binary-arch binary-indep binary clean
diff --git a/testset/tags.binary b/testset/tags.binary
index c206f69..41a9ff3 100644
--- a/testset/tags.binary
+++ b/testset/tags.binary
@@ -58,6 +58,7 @@ I: binary: capitalization-error-in-description debian Debian
I: binary: desktop-entry-contains-encoding-key /usr/share/applications/goodbye.desktop:11 Encoding
I: binary: desktop-entry-contains-encoding-key /usr/share/applications/hello.desktop:13 Encoding
I: binary: no-md5sums-control-file
+W: binary source: debian-rules-missing-recommended-target build-indep
W: binary source: ancient-standards-version 3.2.1 (current is 3.9.1)
W: binary source: debian-rules-ignores-make-clean-error line 12
W: binary source: debian-rules-uses-pwd line 9
diff --git a/testset/tags.etcfiles b/testset/tags.etcfiles
index 7875f92..49bfb0f 100644
--- a/testset/tags.etcfiles
+++ b/testset/tags.etcfiles
@@ -10,6 +10,7 @@ E: etcfiles: no-copyright-file
E: etcfiles: non-etc-file-marked-as-conffile /var/lib/foo
E: only-etcfiles: extended-description-is-empty
I: etcfiles source: missing-debian-source-format
+W: etcfiles source: debian-rules-missing-recommended-target build-arch
W: etcfiles source: ancient-standards-version 3.5.0 (current is 3.9.1)
W: etcfiles: file-missing-in-md5sums etc/improper-link
W: etcfiles: file-missing-in-md5sums usr/share/doc/etcfiles/changelog
--
1.7.2.3
Reply to: