I feel ashamed. My initial draft for the build-dependency specification - which was carefully put together after a period of experimentation and checking of prior art - did not include the architecture specifications ("[!i386]"). It was added very late in the process after Marcus Brinkmann and Joel Klecker had lobbyed hard for it. When I wrote my final draft, I added them and wrote the relevant language with too little thought, as it turns out. The result is a humiliating error in the spec, which should be corrected ASAP.
Here's the relevant part of the Packaging Manual, section 8.1, last non-example paragraph: "An exclamation mark may be prepended to each name. If the current Debian host architecture is not in this list, or it is in the list with a prepended exclamation mark, the package name and the associated version specification are ignored completely for the purposes of defining the relationships." The idea was that [!i386] would be ignored ONLY in i386 and used by other architectures. As it turns out, the wording of the spec means something quite different: Suppose we're building on alpha, and we need to decide whether "kernel-headers-2.2.12 [!hurd-i386 !m68k]" is a relevant dependency. We check that + alpha is not in the list [!hurd-i386 !m68k], and + alpha is not in the list [!hurd-i386 !m68k] with a prepended exclamation mark and therefore conclude that the dependency must be ignored. In fact, this reasoning is valid for all values of "alpha" not equal to "hurd-i386" or "m68k", and therefore [!X !Y !Z ...] means "always ignore me". Ouch! I think it is quite clear that this is not what was intended, and therefore I ask the policy editors to consider this problem a typo on my part, and replace the quoted paragraph with the following, which should reflect the intended semantics: An exclamation mark may be prepended to each name. If the current Debian host architecture is not in this list and there are no exclamation marks in the list, or it is in the list with a prepended exclamation mark, the package name and the associated version specification are ignored completely for the purposes of defining the relationships. The only change is the addition of the phrase "and there are no exclamation marks in the list". Theorem: This paragraph does indeed reflect the intended semantics. Proof: It is easy to see that the exclamation mark defines exclusion from the set and the absence of the exclamation mark defines inclusion in the set. The base set for the exclusion is the set of all architectures, since all architecture names which are not mentioned with an exclamation mark are included; that is, [!m68k !sparc] means the same as [alpha arm hurd-i386 i386 powerpc]. If there are architecture names without an exclamation mark when the list contains names with an exclamation mark, the list is equivalent to one without the names without the exclamation mark; that is, [i386 !m68k !sparc] means the same as [!m68k !sparc]. _ |_| [How did I notice this? I was putting together the build-essential package and decided to use the same syntax in a certain file which is used for generating the /usr/share/doc file and the dependencies. I tried to state the semantics in a different, more formal way, in which the problem was obvious.] -- %%% Antti-Juhani Kaijanaho % [EMAIL PROTECTED] % http://www.iki.fi/gaia/ %%% "" (John Cage)