[PATCH] Check for deprecated Debian-specific Makefile.PL usage
Niko Tyni
ntyni at debian.org
Sat Feb 6 13:09:20 UTC 2010
As discussed in #545904, about 250 perl library packages use an obsolete
way of overriding the installation directory at build time.
---
checks/rules | 5 ++
checks/rules.desc | 17 +++++
t/tests/rules-perl-makemaker/debian/Foo.pm | 3 +
t/tests/rules-perl-makemaker/debian/Makefile.PL | 6 ++
t/tests/rules-perl-makemaker/debian/debian/compat | 1 +
.../rules-perl-makemaker/debian/debian/control.in | 14 ++++
t/tests/rules-perl-makemaker/debian/debian/rules | 63 ++++++++++++++++++++
t/tests/rules-perl-makemaker/desc | 6 ++
t/tests/rules-perl-makemaker/tags | 1 +
9 files changed, 116 insertions(+), 0 deletions(-)
create mode 100644 t/tests/rules-perl-makemaker/debian/Foo.pm
create mode 100644 t/tests/rules-perl-makemaker/debian/Makefile.PL
create mode 100644 t/tests/rules-perl-makemaker/debian/debian/compat
create mode 100644 t/tests/rules-perl-makemaker/debian/debian/control.in
create mode 100755 t/tests/rules-perl-makemaker/debian/debian/rules
create mode 100644 t/tests/rules-perl-makemaker/desc
create mode 100644 t/tests/rules-perl-makemaker/tags
diff --git a/checks/rules b/checks/rules
index 230d52e..db5610c 100644
--- a/checks/rules
+++ b/checks/rules
@@ -143,9 +143,11 @@ my @current_targets;
my %rules_per_target;
my %debhelper_group;
my $maybe_skipping;
+my $uses_makefile_pl = 0;
while (<RULES>) {
next if /^\s*\#/;
$includes = 1 if m/^ *[s-]?include\s+/;
+ $uses_makefile_pl = 1 if m/Makefile\.PL/;
# Check for DH_COMPAT settings outside of any rule, which are now
# deprecated. It's a bit easier structurally to do this here than in
@@ -168,6 +170,9 @@ while (<RULES>) {
if (/^\s*DEB_AUTO_UPDATE_DEBIAN_CONTROL\s*=\s*yes/) {
tag 'debian-rules-automatically-updates-control', "line $.";
}
+ if ($uses_makefile_pl && /install.*PREFIX/ && !/DESTDIR/) {
+ tag 'debian-rules-perl-makemaker-prefix-is-deprecated', "line $.";
+ }
# Keep track of whether this portion of debian/rules may be optional
if (/^ifn?(eq|def)\s/) {
diff --git a/checks/rules.desc b/checks/rules.desc
index 9f3df07..801f291 100644
--- a/checks/rules.desc
+++ b/checks/rules.desc
@@ -158,3 +158,20 @@ Info: The specified package is required to run the clean target of
<tt>debian/rules</tt> and therefore must be listed in Build-Depends, not
Build-Depends-Indep, even if no architecture-dependent packages are
built.
+
+Tag: debian-rules-perl-makemaker-prefix-is-deprecated
+Severity: normal
+Certainty: possible
+Info: The package appears to use an ExtUtils::MakeMaker (Makefile.PL)
+ build system and sets the temporary installation path by overriding
+ PREFIX when calling `make install'. This only works because of a Debian
+ specific ExtUtils::MakeMaker change that the maintainers of the Debian
+ perl package want to remove once the packages needing it are fixed.
+ .
+ The preferred way to set the installation directory is with DESTDIR.
+ Setting PREFIX should not be necessary at all. For example, the line
+ make install PREFIX=$(TMP)/usr # WRONG
+ should be replaced with
+ make install DESTDIR=$(TMP) # RIGHT
+ .
+ See http://bugs.debian.org/545904 for more details.
diff --git a/t/tests/rules-perl-makemaker/debian/Foo.pm b/t/tests/rules-perl-makemaker/debian/Foo.pm
new file mode 100644
index 0000000..533bb3c
--- /dev/null
+++ b/t/tests/rules-perl-makemaker/debian/Foo.pm
@@ -0,0 +1,3 @@
+package Foo;
+our $VERSION = '1.1';
+1;
diff --git a/t/tests/rules-perl-makemaker/debian/Makefile.PL b/t/tests/rules-perl-makemaker/debian/Makefile.PL
new file mode 100644
index 0000000..ccd0d80
--- /dev/null
+++ b/t/tests/rules-perl-makemaker/debian/Makefile.PL
@@ -0,0 +1,6 @@
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+ NAME => 'Foo',
+ VERSION_FROM => 'Foo.pm',
+);
diff --git a/t/tests/rules-perl-makemaker/debian/debian/compat b/t/tests/rules-perl-makemaker/debian/debian/compat
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/t/tests/rules-perl-makemaker/debian/debian/compat
@@ -0,0 +1 @@
+5
diff --git a/t/tests/rules-perl-makemaker/debian/debian/control.in b/t/tests/rules-perl-makemaker/debian/debian/control.in
new file mode 100644
index 0000000..d52ef24
--- /dev/null
+++ b/t/tests/rules-perl-makemaker/debian/debian/control.in
@@ -0,0 +1,14 @@
+Source: {$srcpkg}
+Priority: extra
+Section: {$section}
+Maintainer: {$author}
+Standards-Version: {$standards_version}
+Build-Depends: debhelper (>= 5)
+
+Package: {$srcpkg}
+Architecture: {$architecture}
+Depends: $\{shlibs:Depends\}, $\{misc:Depends\}
+Description: {$description}
+ This is a test package designed to exercise some feature or tag of
+ Lintian. It is part of the Lintian test suite and may do very odd
+ things. It should not be installed like a regular package.
diff --git a/t/tests/rules-perl-makemaker/debian/debian/rules b/t/tests/rules-perl-makemaker/debian/debian/rules
new file mode 100755
index 0000000..4559967
--- /dev/null
+++ b/t/tests/rules-perl-makemaker/debian/debian/rules
@@ -0,0 +1,63 @@
+#!/usr/bin/make -f
+
+#export DH_VERBOSE=1
+
+PERL ?= /usr/bin/perl
+
+PACKAGE = $(shell dh_listpackages)
+TMP = $(CURDIR)/debian/$(PACKAGE)
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+
+ perl Makefile.PL verbose INSTALLDIRS=vendor
+
+ touch configure-stamp
+
+build: build-stamp
+build-stamp: configure-stamp
+ dh_testdir
+
+ $(MAKE) OPTIMIZE="-O2 -g -Wall"
+ $(MAKE) test
+
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+
+ [ ! -e Makefile ] || $(MAKE) distclean
+
+ dh_clean configure-stamp build-stamp
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ $(MAKE) install PREFIX=$(TMP)/usr
+
+ # Remove any empty directories
+ find $(TMP)/usr -type d -empty -print0 | xargs --no-run-if-empty --null rmdir -p --ignore-fail-on-non-empty
+
+binary-arch:
+
+binary-indep: build install
+ dh_testdir
+ dh_testroot
+ dh_installdocs
+ dh_installman
+ dh_installchangelogs
+ dh_compress
+ dh_fixperms
+ dh_installdeb
+ dh_perl
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/t/tests/rules-perl-makemaker/desc b/t/tests/rules-perl-makemaker/desc
new file mode 100644
index 0000000..04e6615
--- /dev/null
+++ b/t/tests/rules-perl-makemaker/desc
@@ -0,0 +1,6 @@
+Testname: rules-perl-makemaker
+Sequence: 6000
+Version: 1.0
+Description: Check detection of PREFIX usage in Makefile.PL based packages
+Test-For: debian-rules-perl-makemaker-prefix-is-deprecated
+References: Debian Bug#545904
diff --git a/t/tests/rules-perl-makemaker/tags b/t/tests/rules-perl-makemaker/tags
new file mode 100644
index 0000000..96918df
--- /dev/null
+++ b/t/tests/rules-perl-makemaker/tags
@@ -0,0 +1 @@
+W: rules-perl-makemaker source: debian-rules-perl-makemaker-prefix-is-deprecated line 41
--
1.6.6.1
--OgqxwSJOaUobr8KG--
More information about the Perl-maintainers
mailing list