Can we require build-arch/indep targets for lenny?
I would like to gather up some momentum for a policy change. Namely
that the build-arch/indep targets in debian/rules become required
instead of being optional.
The reason for this is that dpkg-buildpackage can't reliable detect
the existance of the build-arch/indep targets and must call 'build'
instead. This forces every source to compile both architecture
specific and architecture independent code on all buildds and
increases the Build-Depends of packages a lot.
I asked Lucas Nussbaum to rebuild all of debian with dpkg-buildpackage
patched to call 'build-arch'. Here is the result:
7326 packages rebuilt (all packages not Architecture:all)
1727 built successfully
5463 failed to build with a "no rule to make" error.
136 failed for other reasons (unsat builddeps, etc)
That means that only about 25% of debian package have a build-arch
target. So there is still a long way to got.
Possible upgrade paths:
1) Change policy now making 75% of package RC buggy instantly.
This sounds horrible but the fix is trivial and there is still a
long time to lenny to fix it.
2) Enforce the target for all new uploads and change policy once we
The unstable/experimental buildds could be patched to call
'build-arch' instead of build making any upload without
'build-arch' FTBFS. The security buildds would be left
as is so nothing old breaks.
3) Require 'build-arch/indep' with Standards-Version x.y.z
Every source has a Standards-Version entry. dpkg-buildpackage could
call 'build-arch' if the standards version is new enough and fall
back to 'build' for older versions.
The options can be combined for maximum effect.
How to fix your own package:
The minimal change to debian/rules would be to replace 'build:' with
'build%:'. But that doesn't always work (e.g. not with cdbs).
The next smallest change is to add 'build-%: build' to
debian/rules. That always works.
If you actualy have different things to build for arch and indep then
you are missing the benefits though with the above solutions. If you
have such a case then the recommended way in policy is the right
solution. Create 'build-arch' and 'build-indep' targets with the
respective build rules and have 'build' depend on both.
If you don't then you can also create 'build-arch' and 'build-indep'
targets that depend on 'build' if you don't like the pattern matching