[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#604397: debian-policy: build-arch and build-indep targets are required



Package: debian-policy
Version: 3.9.1.0
Severity: normal
Tags: patch

Hi,

As a goal for wheezy, I'd like the Build-Depends and
Build-Depends-Indep fields to be fully functional and usable for
autobuilding.  Currently, Build-Depends-Indep isn't useful, and
only Build-Depends is used in practice on our autobuilder
infrastructure (despite it being perfectly capable of handling
and using B-D-I internally).

The reason for this is that we do our building using dpkg-buildpackage,
and while binary-arch and binary-indep are required targets used by
dpkg-buildpackage, the corresponding build-arch and build-indep targets
are not required and are not used by dpkg-buildpackage at present.

There's some history to this in #374029.  Most of the information
about sbuild/buildds in there is outdated and incorrect.  The only
sticking point to using Build-Depends-Indep and autobuilding
arch-all packages is the lack of support for build-arch and build-all
in dpkg-buildpackage.

Simply enabling this in dpkg-buildpackage would cause widespread
breakage.  build-arch and build-indep have been suggested in Policy
for some time, and they are used by a low percentage of the archive
at present (<400 packages), while 50% of the archive uses dh or
cdbs rules which would allow trivial support in all those packages
once the tools are updated.

I'd like to propose that build-arch and build-indep be changed in
Policy from "may be provided" to "must be provided" in preparation
for enabling their use.  We've wanted to fix the root problem for
at least half a decade, and I'd like to get it done for wheezy.

This should probably also be accompanied by a new lintian check which
can warn if these rules are missing.

Note, this patch obviates the need for the patch in #601839.


Regards,
Roger

-- System Information:
Debian Release: 5.0.6
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: powerpc (ppc)

Kernel: Linux 2.6.26-2-powerpc
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

debian-policy depends on no packages.

debian-policy recommends no packages.

Versions of packages debian-policy suggests:
ii  doc-base                      0.8.20     utilities to manage online documen

-- no debconf information
diff --git a/policy.sgml b/policy.sgml
index 642f672..29a7db4 100644
--- a/policy.sgml
+++ b/policy.sgml
@@ -1858,8 +1858,9 @@
 	<p>
 	  The following targets are required and must be implemented
 	  by <file>debian/rules</file>: <tt>clean</tt>, <tt>binary</tt>,
-	  <tt>binary-arch</tt>, <tt>binary-indep</tt>, and <tt>build</tt>.
-	  These are the targets called by <prgn>dpkg-buildpackage</prgn>.
+	  <tt>binary-arch</tt>, <tt>binary-indep</tt>, <tt>build</tt>,
+	  <tt>build-arch</tt>, and <tt>build-indep</tt>.  These are the
+	  targets called by <prgn>dpkg-buildpackage</prgn>.
 	</p>
 
 	<p>
@@ -1943,43 +1944,35 @@
 	    </tag>
 	    <item>
 	      <p>
-		A package may also provide both of the targets
+		A package must also provide both of the targets
 		<tt>build-arch</tt> and <tt>build-indep</tt>.
-		The <tt>build-arch</tt> target, if provided, should
-		perform all the configuration and compilation required for
-		producing all architecture-dependant binary packages
-		(those packages for which the body of the
-		<tt>Architecture</tt> field in <tt>debian/control</tt> is
-		not <tt>all</tt>).  Similarly, the <tt>build-indep</tt>
-		target, if provided, should perform all the configuration
-		and compilation required for producing all
-		architecture-independent binary packages (those packages
-		for which the body of the <tt>Architecture</tt> field
+		The <tt>build-arch</tt> target should perform all the
+		configuration and compilation required for producing
+		all architecture-dependant binary packages (those
+		packages for which the body of the
+		<tt>Architecture</tt> field in <tt>debian/control</tt>
+		is not <tt>all</tt>).  Similarly,
+		the <tt>build-indep</tt> target, should perform all
+		the configuration and compilation required for
+		producing all architecture-independent binary packages
+		(those packages for which the body of
+		the <tt>Architecture</tt> field
 		in <tt>debian/control</tt> is <tt>all</tt>).
-		The <tt>build</tt> target should depend on those of the
-		targets <tt>build-arch</tt> and <tt>build-indep</tt> that
-		are provided in the rules file.<footnote>
-		  The intent of this split is so that binary-only builds
-		  need not install the dependencies required for
-		  the <tt>build-indep</tt> target.  However, this is not
-		  yet used in practice since <tt>dpkg-buildpackage
-		  -B</tt>, and therefore the autobuilders,
-		  invoke <tt>build</tt> rather than <tt>build-arch</tt>
-		  due to the difficulties in determining whether the
-		  optional <tt>build-arch</tt> target exists.
+		The <tt>build</tt> target should depend on
+		the <tt>build-arch</tt> and <tt>build-indep</tt>
+		targets.<footnote> The intent of this split is so
+		that binary-only builds need not install the
+		dependencies required for the <tt>build-indep</tt>
+		target.  However, this is not yet used in practice
+		since <tt>dpkg-buildpackage -B</tt>, and therefore the
+		autobuilders, invoke <tt>build</tt> rather
+		than <tt>build-arch</tt> due to the difficulties in
+		determining whether the optional <tt>build-arch</tt>
+		target exists.
 		</footnote>
 	      </p>
 
 	      <p>
-		If one or both of the targets <tt>build-arch</tt> and
-		<tt>build-indep</tt> are not provided, then invoking
-		<file>debian/rules</file> with one of the not-provided
-		targets as arguments should produce a exit status code
-		of 2.  Usually this is provided automatically by make
-		if the target is missing.
-	      </p>
-
-	      <p>
 		The <tt>build-arch</tt> and <tt>build-indep</tt> targets
 		must not do anything that might require root privilege.
 	      </p>
@@ -2006,13 +1999,13 @@
 	      <p>
 		Both <tt>binary-*</tt> targets should depend on the
 		<tt>build</tt> target, or on the appropriate
-		<tt>build-arch</tt> or <tt>build-indep</tt> target, if
-		provided, so that the package is built if it has not
-		been already.  It should then create the relevant
-		binary package(s), using <prgn>dpkg-gencontrol</prgn> to
-		make their control files and <prgn>dpkg-deb</prgn> to
-		build them and place them in the parent of the top
-		level directory.
+		<tt>build-arch</tt> or <tt>build-indep</tt> target, so
+		that the package is built if it has not been already.
+		It should then create the relevant binary package(s),
+		using <prgn>dpkg-gencontrol</prgn> to make their
+		control files and <prgn>dpkg-deb</prgn> to build them
+		and place them in the parent of the top level
+		directory.
 	      </p>
 
 	      <p>

Reply to: