On Wed, Jul 27, 2011 at 09:12:37PM +1000, Ben Finney wrote: > Roger Leigh <email@example.com> writes: > > > On Wed, Jul 27, 2011 at 08:23:42AM +1000, Ben Finney wrote: > > > Kilian Krause <firstname.lastname@example.org> writes: > > > > > > > Hi Ben, > > > > > > > > On Tue, 2011-07-26 at 17:10 +1000, Ben Finney wrote: > > > > > Lintian recommends (via tag ‘debian-rules-missing-recommended-target’): > > > > > > > > > > ===== > > > > > N: Note that the following form is recommended however: > > > > > N: > > > > > N: build: build-arch build-indep > > > > > N: build-arch: build-stamp > > > > > N: build-indep: build-stamp > > > > > N: build-stamp: > > > > > N: build here > > > > > ===== > […] > > > > Should Lintian's recommendation be changed? > > > > Quite possibly, I'm sure the lintian maintainers would be happy to > > have improved help text. I didn't write it with dh in mind > > Okay. (Thanks for writing it.) > > If you were to write it with ‘dh’ in mind, what would be the recommended > set of explicit targets? For an idealised package, there would be no explicit targets, except for any overrides required. Using schroot and gutenprint as examples: http://anonscm.debian.org/gitweb/?p=buildd-tools/schroot.git;a=blob;f=debian/rules;h=253d68daefece8c7cbfac6e1e29e6da768b6591f;hb=HEAD http://anonscm.debian.org/gitweb/?p=collab-maint/gutenprint.git;a=blob;f=debian/rules;h=be10561b84be50eea894c1104f4efa05f7b77a8b;hb=HEAD Neither of these need explicit build targets. They do need explicit install targets, but only due to the need to autogenerate .install files via a separate rule for multiarch dirs, which I'm triggering via a make dependency. In both cases, I am simply using "override_dh_auto_build" to make it do the particular build command for the package, and at least for gutenprint, it's probably entirely redundant since the default would do the same. > > The main problems with > > build-arch: build > > build-indep: build > > I'm not sure who suggested that; it doesn't seem to be in this thread. It's the first part of the lintian message; I just mentioned it for completeness in case it got trimmed out of the first message I saw in the thread, in particular because of the dh-related recursion gotcha that might catch people unawares. > > since dh works with build-arch and build-indep automatically since > > 8.1.0 > > Ah, thank you. I now need to increase the ‘debhelper’ dependency and > ‘compat’ level to correctly rely on its support for those targets. Yes. v8 will support build-arch and build-indep as "sequences", v9 will allow you to use the rules in debian/rules (and have dh realise that and use them in place of its build-in sequences) in addition. > > and since 8.9.0 with v9 compatibility mode, dh supports proper > > overriding of sequences with make targets. But unless you're doing > > something really different, you shouldn't need to specify any build > > rules at all > > Both of those are rather too much magic. One of the great benefits of > using debhelper( as opposed to CDBS) is that one can look at a > ‘debian/rules’ file without specific knowledge about debhelper, and see > at least what commands will be run when. > > So, if Lintian is going to recommend these targets, what text would make > it a suitable recommendation for both no-helper and ‘debhelper’ rules > styles? Without any helper: build: build-arch build-indep build-arch: # Build arch-dep here build-indep: # Build arch-indep here And this can include additional dependencies for build-arch and build-indep such as the build-stamp suggested in the lintian text (saves building twice if both rules use the same logic). build can't have any additional dependencies, since it's optional--it can only depends on build-arch and build-indep, and should do nothing else (since it's not guaranteed to be called if you used build-arch and/or build-indep directly). With dh v8 compat: Same command for arch and indep: override_dh_auto_build: $(MAKE) foobar If you have different commands for arch and indep: override_dh_auto_build: ifneq (,$(shell dh_listpackages -a 2>/dev/null)) $(MAKE) -C debian/build all endif ifneq (,$(shell dh_listpackages -i 2>/dev/null)) $(MAKE) -C debian/build doc endif With dh v9 compat: Same command for arch and indep: override_dh_auto_build: $(MAKE) foobar If you have different commands for arch and indep: build-arch: dh_testdir $(MAKE) arch-foo build-indep: dh_testdir $(MAKE) indep-foo Or the same logic as v8. As you can see, the "magic" is really only required for v8 compat mode. In v9, we can safely use rules directly as we would for non-dh rules. (You can use rules directly in v8, but dh won't always use them since the "sequence" is just a list of dh commands, so "dh binary" won't use any install or build targets; in v9 it will use the appropriate targets if present, and skip the sequence for that target, giving you more control and using all standard targets as expected.) Regards, Roger -- .''`. Roger Leigh : :' : Debian GNU/Linux http://people.debian.org/~rleigh/ `. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/ `- GPG Public Key: 0x25BFB848 Please GPG sign your mail.
Description: Digital signature