(Bcc to debian-dpkg for info) On Mon, 06 Jun 2011, Steve Langasek wrote: > If this were to be put to a vote today, I would propose the following ballot > options: > > 1) Implement support for calling 'debian/rules build-arch' in place of > 'debian/rules build' by checking for the presence of the target using > 'make -qn'.[1] > > 2) Implement support for calling 'debian/rules build-arch' with a fallback > to 'debian/rules build' by checking whether the output of the build-arch > target matches that of a dummy target.[2] > > 3) Implement support for calling 'debian/rules build-arch' in place of > 'debian/rules build' if a Build-Options field is set in debian/control > of the source package specifying that this target is supported.[3] > > 4) Turn on direct use of 'debian/rules build-arch' on the autobuilders for > all packages in unstable and experimental immediately, with no fallback > if the target does not exist; requires a corresponding update to Policy > and mass updates to fix packages that fail to build as a result. > > 5) Further Discussion
I suggest a supplementary option that combines 4 and 1. And I attach the corresponding dpkg patch. --- Turn on direct use of "debian/rules build-arch" unless the package seems to be missing the target according to "make -qn". In that case output a warning that asks the packager to implement the required targets, but fallback to using the "build" target. The fallback to build and the "make -qn" auto-detection is temporary to ease the transition but should dropped at some point (wheezy+1, or wheezy+2). The policy should document that the targets must be supported. --- Lucas, can you do a full rebuild with the packages below ? http://people.debian.org/~hertzog/packages/dpkg-dev_1.16.1~buildarch.1_all.deb http://people.debian.org/~hertzog/packages/libdpkg-perl_1.16.1~buildarch.1_all.deb You should use a binary-only build (i.e. dpkg-buildpackage -B or -A for packages which are arch: all). I would like to know if it introduces new build failures, and also how many packages have this warning: dpkg-buildpackage: warning: debian/rules must be updated to support the 'build-arch' and 'build-indep' targets (at least 'build-arch' seems to be missing) grep just on "debian/rules must be updated to support", the parenthesis can vary between -B and -A. Also you can only see the warning if you use -B or -A, with -b (the default), you can't generate it. Cheers, -- Raphaël Hertzog ◈ Debian Developer Follow my Debian News ▶ http://RaphaelHertzog.com (English) ▶ http://RaphaelHertzog.fr (Français)
diff --git a/scripts/dpkg-buildpackage.pl b/scripts/dpkg-buildpackage.pl index 32427a0..a7d217c 100755 --- a/scripts/dpkg-buildpackage.pl +++ b/scripts/dpkg-buildpackage.pl @@ -32,6 +32,7 @@ use Dpkg::Compression; use Dpkg::Version; use Dpkg::Changelog::Parse; use Dpkg::Path qw(find_command); +use Dpkg::IPC; textdomain("dpkg-dev"); @@ -253,7 +254,22 @@ if ($noclean) { } my $buildfeats = Dpkg::BuildFeatures->new(); -$buildtarget = 'build' unless $buildfeats->has('build-arch'); +unless ($buildtarget eq "build" or $buildfeats->has('build-arch') or + scalar(@debian_rules) > 1) { + my $pid = spawn(exec => [ "make", "-f", @debian_rules, "-qn", $buildtarget ], + from_file => "/dev/null", to_file => "/dev/null", + error_to_file => "/dev/null"); + my $cmdline = "make -f @debian_rules -qn $buildtarget"; + wait_child($pid, nocheck => 1, cmdline => $cmdline); + my $exitcode = WEXITSTATUS($?); + subprocerr($cmdline) unless WIFEXITED($?); + if ($exitcode == 2) { + warning(_g("%s must be updated to support the 'build-arch' and " . + "'build-indep' targets (at least '%s' seems to be " . + "missing)"), "@debian_rules", $buildtarget); + $buildtarget = "build"; + } +} if ($< == 0) { warning(_g("using a gain-root-command while being root")) if (@rootcommand);