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

Bug#72335: PROPOSAL] Optional build-arch and build-indep targets for debian/rules



OK, after Wichert's comments, here is a new version of the proposed
amendment to policy.  Note that there is no mention of "debian/rules
-q <target>" giving exit status of 2 if the target does not exist;
this should really be handled as part of the question of whether
debian/rules are makefiles is mandatory or not.

Also, while this does not *require* or *need* any changes to
dpkg-buildpackage (and I was wrong to intially suggest it does), it
would certainly be enhanced by such changes.  The autobuilders, which
call dpkg-buildpackage -B, would no longer need to install both the
Build-Depends and Build-Depends-Indep if the package provides both
build-arch and build-indep targets and dpkg-buildpackage is enhanced
with the necessary simple change.  That was the original intention
of the Build-Depends/Build-Depends-Indep split; unfortunately this
implementation aspect was overlooked.

Please see the inital proposal for more details.

[I changed the inconsistent use of <prgn> and <tt> in the process as
well.  So there are a few more lines of changes than actually relevant
to this proposal.  Sorry.]

So this is now looking to be reseconded.

--- policy.sgml.orig	Thu Mar 29 11:09:27 2001
+++ policy.sgml	Thu Mar 29 11:23:08 2001
@@ -1761,10 +1761,11 @@
 	<p>
 	  The targets which must be present are:
 	  <taglist>
-	    <tag><tt>build</tt></tag>
+	      <tag><tt>build</tt>, <tt>build-arch</tt> (optional),
+		<tt>build-indep</tt> (optional)</tag>
 	    <item>
 	      <p>
-		This should perform all non-interactive
+		The <tt>build</tt> target should perform all non-interactive
 		configuration and compilation of the package.  If a
 		package has an interactive pre-build configuration
 		routine, the Debianised source package should be
@@ -1772,39 +1773,70 @@
 		built without rerunning the configuration.
 	      </p>
 
+
+	      <p>
+		A package may 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 non-interactive 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 non-interactive
+		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.
+	      </p>
+
 	      <p>
+		If one or both of the targets <tt>build-arch</tt> and
+		<tt>build-indep</tt> are not provided, then invoking
+		<tt>debian/rules</tt> 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>
 		For some packages, notably ones where the same
 		source tree is compiled in different ways to produce
-		two binary packages, the <prgn>build</prgn> target
+		two binary packages, the <tt>build</tt> target
 		does not make much sense.  For these packages it is
 		good enough to provide two (or more) targets
 		(<tt>build-a</tt> and <tt>build-b</tt> or whatever)
 		for each of the ways of building the package, and a
-		<prgn>build</prgn> target that does nothing.  The
-		<prgn>binary</prgn> target will have to build the
+		<tt>build</tt> target that does nothing.  The
+		<tt>binary</tt> target will have to build the
 		package in each of the possible ways and make the
 		binary package out of each.
 	      </p>
 
 	      <p>
-		The <prgn>build</prgn> target must not do anything
-		that might require root privilege.
+		The targets <tt>build</tt>, <tt>build-arch</tt>
+		and <tt>build-indep</tt> target must not do
+		anything that might require root privilege.
 	      </p>
 
 	      <p>
-		The <prgn>build</prgn> target may need to run
-		<prgn>clean</prgn> first - see below.
+		The <tt>build</tt> target may need to run
+		<tt>clean</tt> first - see below.
 	      </p>
 
 	      <p>
-		When a package has a configuration routine that
-		takes a long time, or when the makefiles are poorly
-		designed, or when <prgn>build</prgn> needs to run
-		<prgn>clean</prgn> first, it is a good idea to
-		<tt>touch build</tt> when the build process is
-		complete.  This will ensure that if <tt>debian/rules
-		  build</tt> is run again it will not rebuild the
-		whole program.
+		When a package has a configuration routine that takes
+		a long time, or when the makefiles are poorly
+		designed, or when <tt>build</tt> needs to run
+		<tt>clean</tt> first, it is a good idea to <tt>touch
+		build</tt> when the build process is complete.  This
+		will ensure that if <tt>debian/rules build</tt> is run
+		again it will not rebuild the whole program.
 	      </p>
 	    </item>
 
@@ -1813,36 +1845,36 @@
 	    </tag>
 	    <item>
 	      <p>
-		The <prgn>binary</prgn> target must be all that is
+		The <tt>binary</tt> target must be all that is
 		necessary for the user to build the binary
 		package. All these targets are required to be
 		non-interactive.  It is split into two parts:
-		<prgn>binary-arch</prgn> builds the packages' output
+		<tt>binary-arch</tt> builds the packages' output
 		files which are specific to a particular
-		architecture, and <prgn>binary-indep</prgn> builds
+		architecture, and <tt>binary-indep</tt> builds
 		those which are not.
 	      </p>
 
 	      <p>
-		<prgn>binary</prgn> may be (and commonly is) a target
-		with no commands which simply depends on
-		<prgn>binary-arch</prgn> and
-		<prgn>binary-indep</prgn>.
+		<tt>binary</tt> may be (and commonly is) a target with
+		no commands which simply depends on
+		<tt>binary-arch</tt> and <tt>binary-indep</tt>.
 	      </p>
 
 	      <p>
-		Both <prgn>binary-*</prgn> targets should depend on
-		the <prgn>build</prgn> target, above, 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.
+		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 <tt>dpkg-gencontrol</tt> to
+		make their control files and <tt>dpkg-deb</tt> to
+		build them and place them in the parent of the top
+		level directory.
 	      </p>
 
 	      <p>
-		If one of the <prgn>binary-*</prgn> targets has
+		If one of the <tt>binary-*</tt> targets has
 		nothing to do (this will be always be the case if
 		the source generates only a single binary package,
 		whether architecture-dependent or not) it
@@ -1851,7 +1883,7 @@
 	      </p>
 
 	      <p>
-		The <prgn>binary</prgn> targets must be invoked as
+		The <tt>binary</tt> targets must be invoked as
 		root.
 	      </p>
 	    </item>
@@ -1861,29 +1893,29 @@
 
 	      <p>
 		This must undo any effects that the
-		<prgn>build</prgn> and <prgn>binary</prgn> targets
+		<tt>build</tt> and <tt>binary</tt> targets
 		may have had, except that it should leave alone any
 		output files created in the parent directory by a
-		run of <prgn>binary</prgn>. This target must be
+		run of <tt>binary</tt>. This target must be
 		non-interactive.
 	      </p>
 
 	      <p>
-		If a <prgn>build</prgn> file is touched at the end
-		of the <prgn>build</prgn> target, as suggested
+		If a <tt>build</tt> file is touched at the end
+		of the <tt>build</tt> target, as suggested
 		above, it should be removed as the first thing that
-		<prgn>clean</prgn> does, so that running
-		<prgn>build</prgn> again after an interrupted
-		<prgn>clean</prgn> doesn't think that everything is
+		<tt>clean</tt> does, so that running
+		<tt>build</tt> again after an interrupted
+		<tt>clean</tt> doesn't think that everything is
 		already done.
 	      </p>
 
 	      <p>
-		The <prgn>clean</prgn> target may need to be
-		invoked as root if <prgn>binary</prgn> has been
-		invoked since the last <prgn>clean</prgn>, or if
-		<prgn>build</prgn> has been invoked as root (since
-		<prgn>build</prgn> may create directories, for
+		The <tt>clean</tt> target may need to be
+		invoked as root if <tt>binary</tt> has been
+		invoked since the last <tt>clean</tt>, or if
+		<tt>build</tt> has been invoked as root (since
+		<tt>build</tt> may create directories, for
 		example).
 	      </p>
 	    </item>
@@ -1914,8 +1946,8 @@
 	  </taglist>
 
 	<p>
-	  The <prgn>build</prgn>, <prgn>binary</prgn> and
-	  <prgn>clean</prgn> targets must be invoked with a current
+	  The <tt>build</tt>, <tt>binary</tt> and
+	  <tt>clean</tt> targets must be invoked with a current
 	  directory of the package's top-level directory.
 	</p>
 
@@ -3332,8 +3364,9 @@
 	      <p>
                 The <tt>Build-Depends</tt> and
 		<tt>Build-Conflicts</tt> fields apply to the targets
-		<tt>build</tt>, <tt>binary</tt>, <tt>binary-arch</tt>
-		and <tt>binary-indep</tt>.
+		<tt>build</tt>, <tt>build-arch</tt>,
+		<tt>build-indep</tt>, <tt>binary</tt>,
+		<tt>binary-arch</tt> and <tt>binary-indep</tt>.
 	      </p>
 	    </item>
 	    <tag><tt>Build-Depends-Indep</tt>, <tt>Build-Conflicts-Indep</tt></tag>
@@ -3341,7 +3374,8 @@
 	      <p>
                 The <tt>Build-Depends-Indep</tt> and
 		<tt>Build-Conflicts-Indep</tt> fields apply to the
-		targets <tt>binary</tt> and <tt>binary-indep</tt>.
+		targets <tt>build</tt>, <tt>build-indep</tt>,
+		<tt>binary</tt> and <tt>binary-indep</tt>.
 	      </p>
 	    </item>
 	  </taglist>


   Julian

-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

         Julian Gilbey, Dept of Maths, Queen Mary, Univ. of London
       Debian GNU/Linux Developer,  see http://people.debian.org/~jdg
  Donate free food to the world's hungry: see http://www.thehungersite.com/



Reply to: