[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: