From ec8f6765b4c6e97975b08a69d97265c41438484c Mon Sep 17 00:00:00 2001
From: "Robert P. Goldman" <rpgoldman@sift.net>
Date: Mon, 16 May 2016 17:11:18 -0500
Subject: [PATCH] Added draft explanation of feature dependencies.

---
 doc/asdf.texinfo | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/doc/asdf.texinfo b/doc/asdf.texinfo
index bdae41673..6d0a9c82f 100644
--- a/doc/asdf.texinfo
+++ b/doc/asdf.texinfo
@@ -1441,6 +1441,7 @@ other-component-type := symbol-by-name
 # which is used in :in-order-to
 dependency-def := simple-component-name
                | ( :feature @var{feature-expression} dependency-def )
+                 # (@pxref{The defsystem grammar,,Feature dependencies})
                | ( :version simple-component-name version-specifier )
                | ( :require module-name )
 
@@ -1682,6 +1683,25 @@ rather than @code{#+@emph{implementation-name}}
 to only depend on the specified module on the specific implementation that provides it.
 @xref{if-feature-option}.
 
+@subsection Feature dependencies
+@cindex :feature dependencies
+
+A feature dependency is of the form
+@code{(:feature @var{feature-expression} @var{dependency})}
+If the @var{feature-expression} is satisfied by the running lisp at the
+time the system definition is parsed, then the @var{dependency} will be
+added to the system's dependencies.  If the @var{feature-expression} is
+@emph{not} satisfied, then the feature dependency form is ignored.
+
+Note that this means that @code{:feature} @strong{cannot} be used to
+enforce a feature dependency for the system in question.  I.e., it
+cannot be used to require that a feature hold in order for the system
+definition to be loaded.  E.g., one cannot use @code{(:feature :sbcl)}
+to require that a system only be used on SBCL.
+
+Feature dependencies are not to be confused with the obsolete
+feature requirement (@pxref{The defsystem grammar,,feature requirement}), or
+with @code{if-feature}.
 
 @subsection Using logical pathnames
 @cindex logical pathnames
-- 
GitLab