On Tue, Oct 21, 2003 at 05:03:53PM -0500, Manoj Srivastava wrote:
> We just disallow some usage that has been explicitley stated to
> work. A gratuitous change, with no compelling use cases, or even a
> rationale beyond "why not?", hopefully shall not be accepted.
You keep on referencing to particular features of a specific
implementation of make. Since I know you have a gazillion Unix years
under your belt, that comes as a surprise to me. For example, you keep
talking about including makefiles, but that happens to be a GNU make
feature. The way VPATH works is also GNU make specific. The way -n
works is specific to GNU make, too. If you want to tie debian/rules to
GNU make, then modify policy to say so: a GNU Makefile. Arguments
regarding the nature of Debian's /usr/bin/make are not strong enough,
not as a definition for an interface.
Policy says:
This file must be an executable makefile, and contains the
package-specific recipes for compiling the package and building binary
package(s) from the source.
"excutable makefile", ok, this is the point of contempt.
It must start with the line `#!/usr/bin/make -f', so that it can be
invoked by saying its name rather than invoking `make' explicitly.
That's just a corollary of the first part.
Since an interactive `debian/rules' script makes it impossible to
auto-compile that package and also makes it hard for other people to
reproduce the same binary package, all _required targets_ MUST be
non-interactive. At a minimum, required targets are the ones called
by `dpkg-buildpackage', namely, _clean_, _binary_, _binary-arch_,
_binary-indep_, and _build_. It also follows that any target that
these targets depend on must also be non-interactive.
*that* is an interface definition.
[Policy goes on and defines what these targets do]
Additional targets may exist in `debian/rules', either as published or
undocumented interfaces or for the package's internal use.
Not an interface.
The architectures we build on and build for are determined by `make'
variables using the utility `dpkg-architecture'. You can determine
the Debian architecture and the GNU style architecture specification
string for the build machine (the machine type we are building on) as
well as for the host machine (the machine type we are building for).
Here is a list of supported `make' variables:
* `DEB_*_ARCH' (the Debian architecture)
* `DEB_*_GNU_TYPE' (the GNU style architecture specification
string)
* `DEB_*_GNU_CPU' (the CPU part of `DEB_*_GNU_TYPE')
* `DEB_*_GNU_SYSTEM' (the System part of `DEB_*_GNU_TYPE')
where `*' is either `BUILD' for specification of the build machine or
`HOST' for specification of the host machine.
And *that* is also an interface definition. Calling these make
variables is just bad wording, these are passed via the environment.
The fact that GNU make turns these into make variables is not
important.
Marcelo