Bug#530687: Support for architecture wildcards
Steve Langasek <vorlon@debian.org> writes:
> On Mon, May 31, 2010 at 10:17:39AM -0700, Russ Allbery wrote:
>> - program should be made portable instead.
>> + package, this field may contain special value <tt>all</tt> or
> ^^^^^^^^^^^^^^^^^^^^^
> en_RU? :) Should be 'the special value', I think.
No, my fault. Multiple editing passes with insufficient proofreading.
>> + lists.<footnote>
>> + As mentioned in the footnote for specifying a list of
>> + architectures, this is for a minority of cases where the
> Footnotes referencing footnotes? Not sure this phrase really adds
> anything here unless it can be made a mechanically-followable reference.
Also, it's not true for the case of all. Reworded.
>> + using any kernel and an i386 cpu, and <tt>baz</tt> on
>> + on any architecture using a kernel other than Linux.
>> + </p>
> Doubled "on"
Thanks.
> Given that "any" is the single most commonly used wildcard (for good
> reason) and that this patch changes other parts of Policy to drop
> explicit mention of "any" in favor of a reference to this section, I
> don't think the "any-any-any" normalization belongs in the footnote.
I think the any-any-any normalization belongs in the footnote since I
don't think the triplet stuff is particularly important right now, but all
definitely needs to be called out in that paragraph. Thanks!
Here's an updated patch with those issues fixed.
diff --git a/policy.sgml b/policy.sgml
index ab8fedf..63858eb 100644
--- a/policy.sgml
+++ b/policy.sgml
@@ -2727,27 +2727,35 @@ Package: libc6
<tt>Architecture</tt> field can include the following sets of
values:
<list>
- <item>A unique single word identifying a Debian machine
- architecture as described in <ref id="arch-spec">.
- <item><tt>all</tt>, which indicates an
- architecture-independent package.
- <item><tt>any</tt>, which indicates a package available
- for building on any architecture.
- <item><tt>source</tt>, which indicates a source package.
+ <item>
+ A unique single word identifying a Debian machine
+ architecture as described in <ref id="arch-spec">.
+ </item>
+ <item>
+ An architecture wildcard identifying a set of Debian
+ machine architectures, see <ref id="arch-wildcard-spec">.
+ </item>
+ <item>
+ <tt>all</tt>, which indicates an
+ architecture-independent package.
+ </item>
+ <item>
+ <tt>source</tt>, which indicates a source package.
+ </item>
</list>
</p>
<p>
In the main <file>debian/control</file> file in the source
- package, this field may contain the special value
- <tt>any</tt>, the special value <tt>all</tt>, or a list of
- architectures separated by spaces. If <tt>any</tt> or
- <tt>all</tt> appear, they must be the entire contents of the
- field. Most packages will use either <tt>any</tt> or
- <tt>all</tt>. Specifying a specific list of architectures is
- for the minority of cases where a program is not portable or
- is not useful on some architectures, and where possible the
- program should be made portable instead.
+ package, this field may contain the special value <tt>all</tt>
+ or a list of specific and wildcard architectures separated by
+ spaces. If <tt>all</tt> appears, that value must be the
+ entire contents of the field. Most packages will use
+ either <tt>any</tt> or <tt>all</tt>. Specifying a specific
+ list of architectures is for the minority of cases where a
+ program is not portable or is not useful on some
+ architectures, and where possible the program should be made
+ portable instead.
</p>
<p>
@@ -2789,6 +2797,26 @@ Package: libc6
</p>
<p>
+ Specifying a list of architecture wildcards indicates that
+ the source will build an architecture-dependent package on
+ the union of the lists of architectures from the expansion
+ of each specified architecture wildcard, and will only
+ work correctly on the architectures in the union of the
+ lists.<footnote>
+ Use of architecture wildcards other than <tt>all</tt> is for
+ a minority of cases where the program is not portable and
+ should not be used for most packages. Wildcards are not
+ expanded into a list of known architectures before comparing
+ to the build architecutre. Instead, the build architecture
+ is matched against any wildcards and this package is built
+ if any wildcard matches.
+ </footnote>
+ If the source package also builds at least one
+ architecture-independent package, <tt>all</tt> will also be
+ included in the list.
+ </p>
+
+ <p>
In a <file>.changes</file> file, the <tt>Architecture</tt>
field lists the architecture(s) of the package(s)
currently being uploaded. This will be a list; if the
@@ -4259,6 +4287,23 @@ Build-Depends: foo [!i386] | bar [!amd64]
source package section of the control file (which is the
first section).
</p>
+ <p>
+ All fields that specify build-time relationships
+ (<tt>Build-Depends</tt>, <tt>Build-Depends-Indep</tt>,
+ <tt>Build-Conflicts</tt> and <tt>Build-Conflicts-Indep</tt>) may also
+ be restricted to a certain set of architectures using architecture
+ wildcards. The syntax for declaring such restrictions is the same as
+ declaring restrictions using a certain set of architectures without
+ architecture wildcards.
+ For example:
+ <example compact="compact">
+Build-Depends: foo [linux-any], bar [any-i386], baz [!linux-any]
+ </example>
+ is equivalent to <tt>foo</tt> on architectures using the Linux
+ kernel and any cpu, <tt>bar</tt> on architectures using any
+ kernel and an i386 cpu, and <tt>baz</tt> on any architecture
+ using a kernel other than Linux.
+ </p>
</sect>
<sect id="binarydeps">
@@ -7956,6 +8001,30 @@ done
</p>
</sect>
+ <sect id="arch-wildcard-spec">
+ <heading>Architecture Wildcards</heading>
+
+ <p>
+ A package may specify an architecture wildcard. Architecture
+ wildcards are in the format <tt>any</tt> (which matches every
+ architecture), <tt><var>os</var></tt>-any, or
+ any-<tt><var>cpu</var></tt>. <footnote>
+ Internally, the package system normalizes the GNU triplets and
+ the Debian arches into Debian arch triplets (which are kind of
+ inverted GNU triplets), with the first component of the
+ triplet representing the libc and ABI in use. When matching
+ two Debian arch triplets, whenever an <var>any</var> is found
+ it matches with anything on the other side, like in:
+ <example>
+ gnu-linux-i386 is matched by gnu-linux-any
+ gnu-kfreebsd-amd64 is matched by any-any-amd64
+ </example>
+ And, for example, <var>any</var> is normalized to
+ <var>any-any-any</var>.
+ </footnote>
+ </p>
+ </sect>
+
<sect>
<heading>Daemons</heading>
--
Russ Allbery (rra@debian.org) <http://www.eyrie.org/~eagle/>
Reply to: