Raymond Toy pushed to branch master at cmucl / cmucl
Commits: aba5f454 by Raymond Toy at 2017-10-07T09:00:19-07:00 Update to ASDF version 3.3.0
- - - - -
4 changed files:
- src/contrib/asdf/asdf.lisp - src/contrib/asdf/doc/asdf.html - src/contrib/asdf/doc/asdf.info - src/contrib/asdf/doc/asdf.pdf
Changes:
===================================== src/contrib/asdf/asdf.lisp ===================================== The diff for this file was not included because it is too large.
===================================== src/contrib/asdf/doc/asdf.html ===================================== --- a/src/contrib/asdf/doc/asdf.html +++ b/src/contrib/asdf/doc/asdf.html @@ -31,7 +31,7 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> -<!-- Created by GNU Texinfo 6.3, http://www.gnu.org/software/texinfo/ --> +<!-- Created by GNU Texinfo 6.1, http://www.gnu.org/software/texinfo/ --> <head> <title>ASDF Manual</title>
@@ -235,6 +235,7 @@ ul.no-bullet {list-style: none} <ul class="no-bullet"> <li><a name="toc-_0060_0060My-Common-Lisp-implementation-comes-with-an-outdated-version-of-ASDF_002e-What-to-do_003f_0027_0027" href="#My-Common-Lisp-implementation-comes-with-an-outdated-version-of-ASDF_002e-What-to-do_003f">13.4.1 “My Common Lisp implementation comes with an outdated version of ASDF. What to do?”</a></li> <li><a name="toc-_0060_0060I_0027m-a-Common-Lisp-implementation-vendor_002e-When-and-how-should-I-upgrade-ASDF_003f_0027_0027" href="#I_0027m-a-Common-Lisp-implementation-vendor_002e-When-and-how-should-I-upgrade-ASDF_003f">13.4.2 “I’m a Common Lisp implementation vendor. When and how should I upgrade ASDF?”</a></li> + <li><a name="toc-After-upgrading-ASDF_002c-ASDF-_0028and-Quicklisp_0029-can_0027t-find-my-systems" href="#After-upgrading-ASDF">13.4.3 After upgrading ASDF, ASDF (and Quicklisp) can’t find my systems</a></li> </ul></li> <li><a name="toc-Issues-with-configuring-ASDF-1" href="#Issues-with-configuring-ASDF">13.5 Issues with configuring ASDF</a> <ul class="no-bullet"> @@ -276,7 +277,7 @@ ul.no-bullet {list-style: none} <a name="Top"></a> <a name="ASDF_003a-Another-System-Definition-Facility"></a> <h1 class="top">ASDF: Another System Definition Facility</h1> -<p>Manual for Version 3.2.1 +<p>Manual for Version 3.3.0 </p>
<p>This manual describes ASDF, a system definition facility @@ -353,16 +354,19 @@ ASDF is <em>not</em> a tool for library and system <em>installation</em>; it plays a role like <code>make</code> or <code>ant</code>, not like a package manager. In particular, ASDF should not to be confused with Quicklisp or ASDF-Install, that attempt to find and download ASDF systems for you. -Despite what the name might suggest, ASDF-Install is not part of ASDF, but a separate piece of software. +Despite what the name might suggest, +ASDF-Install was never a part of ASDF, it was a separate piece of software. ASDF-Install is also unmaintained and obsolete. We recommend you use Quicklisp (<a href="http://www.quicklisp.org/">http://www.quicklisp.org/</a>) instead, a Common Lisp package manager which works well and is being actively maintained. If you want to download software from version control instead of tarballs, -so you may more easily modify it, we recommend clbuild (<a href="http://common-lisp.net/project/clbuild/">http://common-lisp.net/project/clbuild/</a>). -We recommend <samp>~/common-lisp/</samp> -as a place into which to install Common Lisp software; -starting with ASDF 3.1.2, it is included in the default source-registry configuration. +so you may more easily modify it, +we recommend clbuild (<a href="http://common-lisp.net/project/clbuild/">http://common-lisp.net/project/clbuild/</a>). +As for where on your filesystem to install Common Lisp software, +we recommend subdirectories of <samp>~/common-lisp/</samp>: +starting with ASDF 3.1.2 (2014), this hierarchy is included +in the default source-registry configuration. </p> <p>Finally, note that this manual is incomplete. All the bases are covered, @@ -511,8 +515,9 @@ before you contact us and raise an issue. <h3 class="section">3.3 Upgrading ASDF</h3>
<p>If your implementation already provides ASDF 3 or later (and it should), -but you want a more recent ASDF version than your implementation provides, -then you just need to ensure the more recent ASDF is installed in a configured path, like any other system. +but you want a more recent ASDF version than your implementation provides, then +you just need to ensure the more recent ASDF is installed in a configured path, +like any other system. We recommend you download an official tarball or checkout a release from git into <samp>~/common-lisp/asdf/</samp>. (see <a href="#Configuring-ASDF-to-find-your-systems">Configuring ASDF to find your systems</a>). @@ -532,15 +537,18 @@ see <a href="#Replacing-your-implementation_0027s-ASDF">Replacing your implement <h3 class="section">3.4 Replacing your implementation’s ASDF</h3>
<p>All maintained implementations now provide ASDF 3 in their latest release. -If your doesn’t, we recommend you upgrade it. +If yours doesn’t, we recommend you upgrade it. </p> -<p>Now, if you insist on using an old implementation that didn’t provide ASDF or provided an old version, +<p>Now, if you insist on using an old implementation +that didn’t provide ASDF or provided an old version, we recommend installing a recent ASDF, as explained below, into your implementation’s installation directory. Thus your modified implementation will now provide ASDF 3. -This requires proper write permissions and may necessitate execution as a system administrator. +This requires proper write permissions and +may necessitate execution as a system administrator. </p> -<p>The ASDF source repository contains a tool to help you upgrade your implementation’s ASDF. +<p>The ASDF source repository contains a tool to +help you upgrade your implementation’s ASDF. You can invoke it from the shell command-line as <code>tools/asdf-tools install-asdf lispworks</code> (where you can replace <code>lispworks</code> by the name of the relevant implementation), @@ -681,17 +689,34 @@ may already have configured system-managed libraries for you.
<p>Novices may skip this section. +Please <em>do not</em> use the central-registry if you are a novice, +and <em>do not</em> instruct novices to use the central-registry. </p> <p>The old way to configure ASDF to find your systems is by <code>push</code>ing directory pathnames onto the variable <code>asdf:*central-registry*</code>. </p> -<p>You must configure this variable between the time you load ASDF -and the time you first try to use it. -Loading and configuring ASDF presumably happen -as part of some initialization script that builds or starts -your Common Lisp software system. -(For instance, some SBCL users used to put it in their <samp>~/.sbclrc</samp>.) +<p>You <em>must</em> configure this variable <em>after</em> you load ASDF 3 or later, +yet <em>before</em> the first time you try to use it. +This loading and configuring of ASDF must happen +as part of some initialization script: +typically, either a script you maintain that builds your project, +or your implementation’s initialization script +(e.g. <samp>~/.sbclrc</samp> for SBCL). +</p> +<p>Also, if you are using an ancient ASDF 2 or earlier to load ASDF 3 or later, +then after it loads the ancient ASDF, your script <em>must</em> configure +the central-registry a first time to tell ASDF 1 or 2 where to find ASDF 3, +then load ASDF 3 with e.g. <code>(asdf:operate 'asdf:load-op "asdf")</code>, +then configure the central-registry again, because +ASDF 3 will not preserve the central-registry from ASDF 2 when upgrading. +You should probably be using the source-registry instead, which will be preserved +(unless you manually called <code>asdf:initialize-source-registry</code> with an argument, +in which case you will have to do it again indeed). +However, if you are using an ancient ASDF 2 or earlier, +we <em>strongly</em> recommend that you should instead upgrade your implementation, +or overwrite the ancient ASDF installation with a more recent one: +See <a href="#Replacing-your-implementation_0027s-ASDF">Replacing your implementation's ASDF</a>. </p> <p>The <code>asdf:*central-registry*</code> is empty by default in ASDF 2 or ASDF 3, but is still supported for compatibility with ASDF 1. @@ -714,6 +739,8 @@ is necessary to tell Lisp that you’re discussing a directory rather than a file. If you leave it out, ASDF is likely to look in <code>/home/me/src/</code> instead of <code>/home/me/src/foo/</code> as you intended, and fail to find your system definition. +Modern versions of ASDF will issue an error and offer you to +remove such entries from the central-registry. </p> <p>Typically there are a lot of <samp>.asd</samp> files, and a common idiom was to put @@ -1309,6 +1336,12 @@ simple-component-name := string
pathname-specifier := pathname | string | symbol
+version-specifier := string + | (:read-file-form <pathname-specifier> <form-specifier>?) + | (:read-file-line <pathname-specifier> <line-specifier>?) +line-specifier := :at integer # base zero +form-specifier := :at [ integer | ( integer+ )] + method-form := (operation-name qual lambda-list &rest body) qual := method qualifier?
@@ -1510,12 +1543,17 @@ had the version strings been interpreted as decimal fractions. the <code>:version</code> argument can be an expression that is resolved to such a string using the following trivial domain-specific language: in addition to being a literal string, it can be an expression of the form -<code>(:read-file-form <pathname-or-string> :at <access-at-specifier>)</code>, -which will be resolved by reading a form in the specified pathname -(read as a subpathname of the current system if relative or a unix-namestring). +<code>(:read-file-form <pathname-or-string> [:at <access-at-specifier]>)</code>, +or <code>(:read-file-line <pathname-or-string> [:at +<access-at-specifier]?>)</code>. +As the name suggests, the former will be resolved by reading a form in the specified pathname +(read as a subpathname of the current system if relative or a +unix-namestring), and the latter by reading a line. You may use a <code>uiop:access-at</code> specifier -with the (optional) <code>:at</code> keyword, -by default the specifier is <code>0</code>, meaning the first form is returned; +with the <code>:at</code> keyword, +by default the specifier is <code>0</code>, meaning the first form/line is +returned. +For <code>:read-file-form</code>, subforms can also be specified, with e.g. <code>(1 2 2)</code> specifying “the third subform (index 2) of the third subform (index 2) of the second form (index 1)” in the file (mind the off-by-one error in the English language). @@ -3486,7 +3524,7 @@ The speedup will only happen if the implementation-provided ASDF is recent enoug since the upgrade will itself be found but after the old version has scanned the directories without heeding such a cache. To upgrade the implementation-provided ASDF, -use our script <code>tools/install-asdf.lisp</code>. +see <a href="#Replacing-your-implementation_0027s-ASDF">Replacing your implementation's ASDF</a>. </p>
<hr> @@ -5308,17 +5346,21 @@ Happily, CMUCL comes with a recent ASDF, and XCL is more of a working demo than something you’d use seriously anyway.
</li><li> For the above reasons, your build and startup scripts -should load, configure and upgrade ASDF among the very first things they do, -and ensure that ASDF 3 or later is present indeed, -before they start using ASDF to load anything else. - -</li><li> Now that all implementations provide ASDF 3.1 or later (since May 2016), +should load ASDF 3, configure it, and upgrade it, +among the very first things they do. +They should ensure that only ASDF 3 or later is used indeed, +and error out if ASDF 2 or earlier was used. + +</li><li> Now that (since May 2016) all maintained implementations +(i.e. having had at least one release since 2014, +or a commit on their public source code repository) +provide ASDF 3.1 or later, the simple solution is just to use code as below in your setup, and when it fails, upgrade your implementation or replace its ASDF. (see <a href="#Replacing-your-implementation_0027s-ASDF">Replacing your implementation's ASDF</a>): <div class="example"> <pre class="example">(require "asdf") -#-asdf3 (error "ASDF 3 or bust") +#-asdf3.1 (error "ASDF 3.1 or bust") </pre></div>
</li><li> For scripts that try to use ASDF simply via <code>require</code> at first, and @@ -5326,13 +5368,14 @@ make heroic attempts to load it the hard way if at first they don’t succee see <samp>tools/load-asdf.lisp</samp> distributed with the ASDF source repository, or the code of <a href="https://cliki.net/cl-launch"><code>cl-launch</code></a>.
-</li><li> Note that in addition to the pitfalls and constraints above, +</li><li> <a name="reinitializeASDFAfterUpgrade"></a>Note that in addition to the pitfalls and constraints above, these heroic scripts (should you wish to write or modify one), must take care to configure ASDF <em>twice</em>. -A first time, right after you load the old ASDF 2 and before you upgrade to the new ASDF 3, +A first time, right after you load the old ASDF 2 (or 1!) +and before you upgrade to the new ASDF 3, so it may find where you put ASDF 3. -A second time, because some implementations can’t handle a smooth upgrade to ASDF 3, -and lose configuration as they do. +A second time, because most implementations can’t handle a smooth upgrade from ASDF 2 to ASDF 3, +so ASDF 3 doesn’t try (anymore) and loses any configuration from ASDF 2. <div class="lisp"> <pre class="lisp">(ignore-errors (funcall 'require "asdf")) ;; <--- try real hard ;; <--- insert heroics here, if that failed to provide ASDF 2 or 3 @@ -5486,7 +5529,38 @@ when they upgrade to the upstream version.
</li></ul>
- +<hr> +<a name="After-upgrading-ASDF"></a> +<a name="After-upgrading-ASDF_002c-ASDF-_0028and-Quicklisp_0029-can_0027t-find-my-systems"></a> +<h4 class="subsection">13.4.3 After upgrading ASDF, ASDF (and Quicklisp) can’t find my systems</h4> +<a name="index-_002acentral_002dregistry_002a"></a> +<a name="index-Quicklisp"></a> + +<p>When you upgrade the ASDF running in your Lisp image +from an ancient ASDF 2 or older to ASDF 3 or newer, +then you may have to re-configure ASDF. +If your configuration only consists in +using the source-registry and output-translations (as it should), +and if you are not explicitly calling <code>asdf:initialize-source-registry</code> +or <code>asdf:initialize-output-translations</code> with a non-nil argument, +then ASDF will reconfigure itself. +Otherwise, you will have to configure ASDF 2 (or older) to find ASDF 3, +then configure ASDF 3. +Notably, <var>*central-registry*</var> is not maintained across upgrades from ASDF 2. +See <a href="#reinitializeASDFAfterUpgrade">note about ASDF reconfiguration after upgrade</a>. +</p> +<p>Problems like this may be experienced if one loads Quicklisp +(which as of this writing bundles an obsolete ASDF version 2.26), +upgrades ASDF, and then tries to load new systems. +The correct solution is to load the most up-to-date ASDF you can, +<em>then</em> configure it, <em>then</em> load Quicklisp and any other extension. +Do <em>not</em> try to upgrade from ASDF 2 <em>after</em> loading Quicklisp, +for it will leave both ASDF and Quicklisp badly misconfigured. +For details see the discussion at the above cross-reference. +</p> +<p>Also, if you are experiencing such failures due to Quicklisp shipping an ancient ASDF, +please complain to Zach Beane about it. +</p>
<hr> <a name="Issues-with-configuring-ASDF"></a> @@ -5884,24 +5958,17 @@ interested, too. ;; Load the test script support. (load "script-support.lisp")
-;; Initialize the script support. -;; This will also change your *package* to asdf-test. +;; Initialize the script support for interaction. +;; This will also change your *package* to asdf-test +;; after frobbing the asdf-test package to make it usable. ;; NB: this function is also available from package cl-user, ;; and also available with the shorter name da in both packages. -(asdf-test::debug-asdf) - -;; In case you modified ASDF since you last tested it, -;; you need to update asdf.lisp itself by evaluating 'make' in a shell, -;; or (require "asdf") (asdf:load-system :asdf) in another CL REPL, -;; if not done in this REPL above. -;; *Then*, in this REPL, you need to evaluate: -;(asdf-test::compile-load-asdf) +(asdf-test:debug-asdf)
;; Now, you may experiment with test code from a .script file. ;; See the instructions given at the end of your failing test ;; to identify which form is needed, e.g. -(frob-packages) -(asdf::with-asdf-cache () (load "test-utilities.script")) +(run-test-script "test-utilities.script") </pre></div>
@@ -6016,6 +6083,8 @@ see the <samp>TODO</samp> file in the source repository. <a class="summary-letter" href="#Concept-Index_cp_letter-P"><b>P</b></a> +<a class="summary-letter" href="#Concept-Index_cp_letter-Q"><b>Q</b></a> + <a class="summary-letter" href="#Concept-Index_cp_letter-R"><b>R</b></a> <a class="summary-letter" href="#Concept-Index_cp_letter-S"><b>S</b></a> @@ -6105,6 +6174,9 @@ see the <samp>TODO</samp> file in the source repository. <tr><td></td><td valign="top"><a href="#index-pathname-specifiers">pathname specifiers</a>:</td><td> </td><td valign="top"><a href="#The-defsystem-grammar">The defsystem grammar</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Primary-system-name">Primary system name</a>:</td><td> </td><td valign="top"><a href="#Components">Components</a></td></tr> <tr><td colspan="4"> <hr></td></tr> +<tr><th><a name="Concept-Index_cp_letter-Q">Q</a></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-Quicklisp">Quicklisp</a>:</td><td> </td><td valign="top"><a href="#After-upgrading-ASDF">After upgrading ASDF</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> <tr><th><a name="Concept-Index_cp_letter-R">R</a></th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-readtables">readtables</a>:</td><td> </td><td valign="top"><a href="#How-do-I-work-with-readtables_003f">How do I work with readtables?</a></td></tr> <tr><td colspan="4"> <hr></td></tr> @@ -6147,6 +6219,8 @@ see the <samp>TODO</samp> file in the source repository. <a class="summary-letter" href="#Concept-Index_cp_letter-P"><b>P</b></a> +<a class="summary-letter" href="#Concept-Index_cp_letter-Q"><b>Q</b></a> + <a class="summary-letter" href="#Concept-Index_cp_letter-R"><b>R</b></a> <a class="summary-letter" href="#Concept-Index_cp_letter-S"><b>S</b></a> @@ -6366,6 +6440,7 @@ see the <samp>TODO</samp> file in the source repository. <tr><td></td><th align="left">Index Entry</th><td> </td><th align="left"> Section</th></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th><a name="Variable-Index_vr_symbol-1">*</a></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-_002acentral_002dregistry_002a"><code>*central-registry*</code></a>:</td><td> </td><td valign="top"><a href="#After-upgrading-ASDF">After upgrading ASDF</a></td></tr> <tr><td></td><td valign="top"><a href="#index-_002acompile_002dfile_002dfailure_002dbehaviour_002a"><code>*compile-file-failure-behaviour*</code></a>:</td><td> </td><td valign="top"><a href="#Error-handling">Error handling</a></td></tr> <tr><td></td><td valign="top"><a href="#index-_002acompile_002dfile_002dwarnings_002dbehaviour_002a"><code>*compile-file-warnings-behaviour*</code></a>:</td><td> </td><td valign="top"><a href="#Error-handling">Error handling</a></td></tr> <tr><td></td><td valign="top"><a href="#index-_002adefault_002dsource_002dregistry_002dexclusions_002a"><code>*default-source-registry-exclusions*</code></a>:</td><td> </td><td valign="top"><a href="#Search-Algorithm">Search Algorithm</a></td></tr>
===================================== src/contrib/asdf/doc/asdf.info ===================================== --- a/src/contrib/asdf/doc/asdf.info +++ b/src/contrib/asdf/doc/asdf.info @@ -1,4 +1,4 @@ -This is asdf.info, produced by makeinfo version 6.3 from asdf.texinfo. +This is asdf.info, produced by makeinfo version 6.1 from asdf.texinfo.
This manual describes ASDF, a system definition facility for Common Lisp programs and libraries. @@ -43,7 +43,7 @@ File: asdf.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) ASDF: Another System Definition Facility ****************************************
-Manual for Version 3.2.1 +Manual for Version 3.3.0
This manual describes ASDF, a system definition facility for Common Lisp programs and libraries. @@ -228,6 +228,7 @@ Issues with installing the proper version of ASDF
* My Common Lisp implementation comes with an outdated version of ASDF. What to do?:: * I'm a Common Lisp implementation vendor. When and how should I upgrade ASDF?:: +* After upgrading ASDF, ASDF (and Quicklisp) can't find my systems: After upgrading ASDF.
Issues with configuring ASDF
@@ -276,16 +277,17 @@ ASDF::, for a description of the ASDF internals and how to extend ASDF. it plays a role like 'make' or 'ant', not like a package manager. In particular, ASDF should not to be confused with Quicklisp or ASDF-Install, that attempt to find and download ASDF systems for you. -Despite what the name might suggest, ASDF-Install is not part of ASDF, -but a separate piece of software. ASDF-Install is also unmaintained and -obsolete. We recommend you use Quicklisp (http://www.quicklisp.org/) -instead, a Common Lisp package manager which works well and is being -actively maintained. If you want to download software from version -control instead of tarballs, so you may more easily modify it, we -recommend clbuild (http://common-lisp.net/project/clbuild/). We -recommend '~/common-lisp/' as a place into which to install Common Lisp -software; starting with ASDF 3.1.2, it is included in the default -source-registry configuration. +Despite what the name might suggest, ASDF-Install was never a part of +ASDF, it was a separate piece of software. ASDF-Install is also +unmaintained and obsolete. We recommend you use Quicklisp +(http://www.quicklisp.org/) instead, a Common Lisp package manager +which works well and is being actively maintained. If you want to +download software from version control instead of tarballs, so you may +more easily modify it, we recommend clbuild +(http://common-lisp.net/project/clbuild/). As for where on your +filesystem to install Common Lisp software, we recommend subdirectories +of '~/common-lisp/': starting with ASDF 3.1.2 (2014), this hierarchy is +included in the default source-registry configuration.
Finally, note that this manual is incomplete. All the bases are covered, but many advanced topics are only barely alluded to, and there @@ -446,7 +448,7 @@ File: asdf.info, Node: Replacing your implementation's ASDF, Next: Loading ASD ========================================
All maintained implementations now provide ASDF 3 in their latest -release. If your doesn't, we recommend you upgrade it. +release. If yours doesn't, we recommend you upgrade it.
Now, if you insist on using an old implementation that didn't provide ASDF or provided an old version, we recommend installing a recent ASDF, @@ -612,16 +614,33 @@ File: asdf.info, Node: Configuring ASDF to find your systems --- old style, Ne 4.2 Configuring ASDF to find your systems -- old style ======================================================
-Novices may skip this section. +Novices may skip this section. Please _do not_ use the central-registry +if you are a novice, and _do not_ instruct novices to use the +central-registry.
The old way to configure ASDF to find your systems is by 'push'ing directory pathnames onto the variable 'asdf:*central-registry*'.
- You must configure this variable between the time you load ASDF and -the time you first try to use it. Loading and configuring ASDF -presumably happen as part of some initialization script that builds or -starts your Common Lisp software system. (For instance, some SBCL users -used to put it in their '~/.sbclrc'.) + You _must_ configure this variable _after_ you load ASDF 3 or later, +yet _before_ the first time you try to use it. This loading and +configuring of ASDF must happen as part of some initialization script: +typically, either a script you maintain that builds your project, or +your implementation's initialization script (e.g. '~/.sbclrc' for +SBCL). + + Also, if you are using an ancient ASDF 2 or earlier to load ASDF 3 or +later, then after it loads the ancient ASDF, your script _must_ +configure the central-registry a first time to tell ASDF 1 or 2 where to +find ASDF 3, then load ASDF 3 with e.g. '(asdf:operate 'asdf:load-op +"asdf")', then configure the central-registry again, because ASDF 3 will +not preserve the central-registry from ASDF 2 when upgrading. You +should probably be using the source-registry instead, which will be +preserved (unless you manually called 'asdf:initialize-source-registry' +with an argument, in which case you will have to do it again indeed). +However, if you are using an ancient ASDF 2 or earlier, we _strongly_ +recommend that you should instead upgrade your implementation, or +overwrite the ancient ASDF installation with a more recent one: *Note +Replacing your implementation's ASDF::.
The 'asdf:*central-registry*' is empty by default in ASDF 2 or ASDF 3, but is still supported for compatibility with ASDF 1. When used, it @@ -640,7 +659,8 @@ pathname.(2) The trailing directory name separator is necessary to tell Lisp that you're discussing a directory rather than a file. If you leave it out, ASDF is likely to look in '/home/me/src/' instead of '/home/me/src/foo/' as you intended, and fail to find your system -definition. +definition. Modern versions of ASDF will issue an error and offer you +to remove such entries from the central-registry.
Typically there are a lot of '.asd' files, and a common idiom was to put _symbolic links_ to all of one's '.asd' files in a common directory @@ -1214,6 +1234,12 @@ File: asdf.info, Node: The defsystem grammar, Next: Other code in .asd files,
pathname-specifier := pathname | string | symbol
+ version-specifier := string + | (:read-file-form <pathname-specifier> <form-specifier>?) + | (:read-file-line <pathname-specifier> <line-specifier>?) + line-specifier := :at integer # base zero + form-specifier := :at [ integer | ( integer+ )] + method-form := (operation-name qual lambda-list &rest body) qual := method qualifier?
@@ -1383,14 +1409,17 @@ happened had the version strings been interpreted as decimal fractions. can be an expression that is resolved to such a string using the following trivial domain-specific language: in addition to being a literal string, it can be an expression of the form '(:read-file-form -<pathname-or-string> :at <access-at-specifier>)', which will be resolved -by reading a form in the specified pathname (read as a subpathname of -the current system if relative or a unix-namestring). You may use a -'uiop:access-at' specifier with the (optional) ':at' keyword, by default -the specifier is '0', meaning the first form is returned; subforms can -also be specified, with e.g. '(1 2 2)' specifying "the third subform -(index 2) of the third subform (index 2) of the second form (index 1)" -in the file (mind the off-by-one error in the English language). +<pathname-or-string> [:at <access-at-specifier]>)', or '(:read-file-line +<pathname-or-string> [:at <access-at-specifier]?>)'. As the name +suggests, the former will be resolved by reading a form in the specified +pathname (read as a subpathname of the current system if relative or a +unix-namestring), and the latter by reading a line. You may use a +'uiop:access-at' specifier with the ':at' keyword, by default the +specifier is '0', meaning the first form/line is returned. For +':read-file-form', subforms can also be specified, with e.g. '(1 2 2)' +specifying "the third subform (index 2) of the third subform (index 2) +of the second form (index 1)" in the file (mind the off-by-one error in +the English language).
System definers are encouraged to use version identifiers of the form X.Y.Z for major version, minor version and patch level, where @@ -3177,8 +3206,8 @@ speedup will only happen if the implementation-provided ASDF is recent enough (3.1.3.7 or later); it is not enough for a recent ASDF upgrade to be present, since the upgrade will itself be found but after the old version has scanned the directories without heeding such a cache. To -upgrade the implementation-provided ASDF, use our script -'tools/install-asdf.lisp'. +upgrade the implementation-provided ASDF, *note Replacing your +implementation's ASDF::.
File: asdf.info, Node: Configuration API, Next: Introspection, Prev: Caching Results, Up: Controlling where ASDF searches for systems @@ -4866,17 +4895,19 @@ when upgrading from ASDF 2, due to limitations in ASDF 2. ASDF, and XCL is more of a working demo than something you'd use seriously anyway.
- * For the above reasons, your build and startup scripts should load, - configure and upgrade ASDF among the very first things they do, and - ensure that ASDF 3 or later is present indeed, before they start - using ASDF to load anything else. - - * Now that all implementations provide ASDF 3.1 or later (since May - 2016), the simple solution is just to use code as below in your - setup, and when it fails, upgrade your implementation or replace - its ASDF. (*note Replacing your implementation's ASDF::): + * For the above reasons, your build and startup scripts should load + ASDF 3, configure it, and upgrade it, among the very first things + they do. They should ensure that only ASDF 3 or later is used + indeed, and error out if ASDF 2 or earlier was used. + + * Now that (since May 2016) all maintained implementations (i.e. + having had at least one release since 2014, or a commit on their + public source code repository) provide ASDF 3.1 or later, the + simple solution is just to use code as below in your setup, and + when it fails, upgrade your implementation or replace its ASDF. + (*note Replacing your implementation's ASDF::): (require "asdf") - #-asdf3 (error "ASDF 3 or bust") + #-asdf3.1 (error "ASDF 3.1 or bust")
* For scripts that try to use ASDF simply via 'require' at first, and make heroic attempts to load it the hard way if at first they don't @@ -4887,10 +4918,11 @@ when upgrading from ASDF 2, due to limitations in ASDF 2. * Note that in addition to the pitfalls and constraints above, these heroic scripts (should you wish to write or modify one), must take care to configure ASDF _twice_. A first time, right after you load - the old ASDF 2 and before you upgrade to the new ASDF 3, so it may - find where you put ASDF 3. A second time, because some - implementations can't handle a smooth upgrade to ASDF 3, and lose - configuration as they do. + the old ASDF 2 (or 1!) and before you upgrade to the new ASDF 3, + so it may find where you put ASDF 3. A second time, because most + implementations can't handle a smooth upgrade from ASDF 2 to ASDF + 3, so ASDF 3 doesn't try (anymore) and loses any configuration from + ASDF 2. (ignore-errors (funcall 'require "asdf")) ;; <--- try real hard ;; <--- insert heroics here, if that failed to provide ASDF 2 or 3 ;; <--- insert configuration here, if that succeeded @@ -4937,6 +4969,7 @@ File: asdf.info, Node: Issues with installing the proper version of ASDF, Next
* My Common Lisp implementation comes with an outdated version of ASDF. What to do?:: * I'm a Common Lisp implementation vendor. When and how should I upgrade ASDF?:: +* After upgrading ASDF, ASDF (and Quicklisp) can't find my systems: After upgrading ASDF.
File: asdf.info, Node: My Common Lisp implementation comes with an outdated version of ASDF. What to do?, Next: I'm a Common Lisp implementation vendor. When and how should I upgrade ASDF?, Prev: Issues with installing the proper version of ASDF, Up: Issues with installing the proper version of ASDF @@ -4954,7 +4987,7 @@ recommend you replace your implementation's ASDF. *Note Replacing your implementation's ASDF::.
-File: asdf.info, Node: I'm a Common Lisp implementation vendor. When and how should I upgrade ASDF?, Prev: My Common Lisp implementation comes with an outdated version of ASDF. What to do?, Up: Issues with installing the proper version of ASDF +File: asdf.info, Node: I'm a Common Lisp implementation vendor. When and how should I upgrade ASDF?, Next: After upgrading ASDF, Prev: My Common Lisp implementation comes with an outdated version of ASDF. What to do?, Up: Issues with installing the proper version of ASDF
13.4.2 "I'm a Common Lisp implementation vendor. When and how should I upgrade ASDF?" ------------------------------------------------------------------------------------- @@ -5022,6 +5055,36 @@ should report upstream and that we will fix ASAP. upgrade to the upstream version.
+File: asdf.info, Node: After upgrading ASDF, Prev: I'm a Common Lisp implementation vendor. When and how should I upgrade ASDF?, Up: Issues with installing the proper version of ASDF + +13.4.3 After upgrading ASDF, ASDF (and Quicklisp) can't find my systems +----------------------------------------------------------------------- + +When you upgrade the ASDF running in your Lisp image from an ancient +ASDF 2 or older to ASDF 3 or newer, then you may have to re-configure +ASDF. If your configuration only consists in using the source-registry +and output-translations (as it should), and if you are not explicitly +calling 'asdf:initialize-source-registry' or +'asdf:initialize-output-translations' with a non-nil argument, then ASDF +will reconfigure itself. Otherwise, you will have to configure ASDF 2 +(or older) to find ASDF 3, then configure ASDF 3. Notably, +*CENTRAL-REGISTRY* is not maintained across upgrades from ASDF 2. *Note +note about ASDF reconfiguration after upgrade: +reinitializeASDFAfterUpgrade. + + Problems like this may be experienced if one loads Quicklisp (which +as of this writing bundles an obsolete ASDF version 2.26), upgrades +ASDF, and then tries to load new systems. The correct solution is to +load the most up-to-date ASDF you can, _then_ configure it, _then_ load +Quicklisp and any other extension. Do _not_ try to upgrade from ASDF 2 +_after_ loading Quicklisp, for it will leave both ASDF and Quicklisp +badly misconfigured. For details see the discussion at the above +cross-reference. + + Also, if you are experiencing such failures due to Quicklisp shipping +an ancient ASDF, please complain to Zach Beane about it. + + File: asdf.info, Node: Issues with configuring ASDF, Next: Issues with using and extending ASDF to define systems, Prev: Issues with installing the proper version of ASDF, Up: FAQ
13.5 Issues with configuring ASDF @@ -5403,24 +5466,17 @@ interested, too. ;; Load the test script support. (load "script-support.lisp")
- ;; Initialize the script support. - ;; This will also change your *package* to asdf-test. + ;; Initialize the script support for interaction. + ;; This will also change your *package* to asdf-test + ;; after frobbing the asdf-test package to make it usable. ;; NB: this function is also available from package cl-user, ;; and also available with the shorter name da in both packages. - (asdf-test::debug-asdf) - - ;; In case you modified ASDF since you last tested it, - ;; you need to update asdf.lisp itself by evaluating 'make' in a shell, - ;; or (require "asdf") (asdf:load-system :asdf) in another CL REPL, - ;; if not done in this REPL above. - ;; *Then*, in this REPL, you need to evaluate: - ;(asdf-test::compile-load-asdf) + (asdf-test:debug-asdf)
;; Now, you may experiment with test code from a .script file. ;; See the instructions given at the end of your failing test ;; to identify which form is needed, e.g. - (frob-packages) - (asdf::with-asdf-cache () (load "test-utilities.script")) + (run-test-script "test-utilities.script")
File: asdf.info, Node: Ongoing Work, Next: Bibliography, Prev: FAQ, Up: Top @@ -5511,34 +5567,34 @@ Concept Index * :asdf2: Introduction. (line 6) * :asdf3: Introduction. (line 6) * :build-operation: The defsystem grammar. - (line 128) + (line 134) * :compile-check: Controlling file compilation. (line 6) * :default-registry source config directive: Configuration DSL. (line 6) * :defsystem-depends-on: The defsystem grammar. - (line 120) + (line 126) * :directory source config directive: Configuration DSL. (line 6) * :exclude source config directive: Configuration DSL. (line 6) * :feature dependencies: The defsystem grammar. - (line 270) + (line 279) * :if-feature component option: The defsystem grammar. - (line 390) + (line 399) * :ignore-invalid-entries source config directive: Configuration DSL. (line 6) * :include source config directive: Configuration DSL. (line 6) * :inherit-configuration source config directive: Configuration DSL. (line 6) * :require dependencies: The defsystem grammar. - (line 260) + (line 269) * :tree source config directive: Configuration DSL. (line 6) * :version: The defsystem form. (line 68) * :version <1>: The defsystem grammar. - (line 229) + (line 235) * :version <2>: Common attributes of components. (line 23) * :weakly-depends-on: The defsystem grammar. - (line 140) + (line 146) * also-exclude source config directive: Configuration DSL. (line 6) * around-compile keyword: Controlling file compilation. (line 6) @@ -5579,23 +5635,25 @@ Concept Index * launchpad: Where do I report a bug?. (line 6) * logical pathnames: The defsystem grammar. - (line 289) + (line 298) * mailing list: Mailing list. (line 6) * operation: Operations. (line 6) * pathname specifiers: The defsystem grammar. - (line 162) + (line 168) * Primary system name: Components. (line 70) +* Quicklisp: After upgrading ASDF. + (line 6) * readtables: How do I work with readtables?. (line 6) * serial dependencies: The defsystem grammar. - (line 335) + (line 344) * system: Components. (line 6) * system designator: Components. (line 6) * System names: Components. (line 70) * Testing for ASDF: Introduction. (line 6) * tree source config directive: Configuration DSL. (line 6) * version specifiers: The defsystem grammar. - (line 229) + (line 235)
File: asdf.info, Node: Function and Class Index, Next: Variable Index, Prev: Concept Index, Up: Top @@ -5776,6 +5834,8 @@ Variable Index [index] * Menu:
+* *central-registry*: After upgrading ASDF. + (line 6) * *compile-file-failure-behaviour*: Error handling. (line 19) * *compile-file-warnings-behaviour*: Error handling. (line 19) * *default-source-registry-exclusions*: Search Algorithm. (line 6) @@ -5791,7 +5851,7 @@ Variable Index * *nil-pathname*: Some Utility Functions. (line 44) * *oldest-forward-compatible-asdf-version*: Pitfalls of the upgrade to ASDF 3. - (line 83) + (line 86) * *source-registry-parameter*: *source-registry-parameter* variable. (line 6) * *standard-output*: How can I capture ASDF's output?. @@ -5806,139 +5866,141 @@ Variable Index Tag Table: Node: Top1684 -Node: Introduction7706 -Node: Quick start summary10009 -Node: Loading ASDF11716 -Node: Loading a pre-installed ASDF12018 -Ref: Loading a pre-installed ASDF-Footnote-113831 -Node: Checking whether ASDF is loaded14013 -Node: Upgrading ASDF14927 -Node: Replacing your implementation's ASDF15915 -Node: Loading ASDF from source17338 -Node: Configuring ASDF18439 -Node: Configuring ASDF to find your systems19212 -Ref: Configuring ASDF to find your systems-Footnote-122517 -Ref: Configuring ASDF to find your systems-Footnote-222764 -Ref: Configuring ASDF to find your systems-Footnote-323046 -Node: Configuring ASDF to find your systems --- old style23507 -Ref: Configuring ASDF to find your systems --- old style-Footnote-125969 -Ref: Configuring ASDF to find your systems --- old style-Footnote-226201 -Ref: Configuring ASDF to find your systems --- old style-Footnote-326968 -Node: Configuring where ASDF stores object files27124 -Node: Resetting the ASDF configuration28527 -Node: Using ASDF29584 -Node: Loading a system29795 -Node: Convenience Functions30812 -Ref: Convenience Functions-Footnote-136172 -Node: Moving on36250 -Node: Defining systems with defsystem36621 -Node: The defsystem form37049 -Node: A more involved example40455 -Ref: A more involved example-Footnote-147437 -Node: The defsystem grammar48119 -Ref: if-feature-option65617 -Node: Other code in .asd files67160 -Node: The package-inferred-system extension68296 -Node: The object model of ASDF72563 -Ref: The object model of ASDF-Footnote-174894 -Ref: The object model of ASDF-Footnote-275246 -Node: Operations75573 -Ref: operate76678 -Ref: make-operation79414 -Node: Predefined operations of ASDF79835 -Ref: test-op81949 -Node: Creating new operations89838 -Node: Components95051 -Ref: System names98535 -Ref: Components-Footnote-1103207 -Ref: Components-Footnote-2103503 -Node: Common attributes of components103825 -Ref: required-features105387 -Node: Pre-defined subclasses of component111234 -Node: Creating new component types113668 -Node: Dependencies114958 -Node: Functions116829 -Node: Controlling where ASDF searches for systems118663 -Node: Configurations119285 -Node: Truenames and other dangers122760 -Node: XDG base directory124046 -Node: Backward Compatibility125460 -Node: Configuration DSL126176 -Node: Configuration Directories131731 -Node: The here directive133558 -Node: Shell-friendly syntax for configuration135451 -Node: Search Algorithm136468 -Node: Caching Results138338 -Node: Configuration API141582 -Node: Introspection143621 -Node: *source-registry-parameter* variable143885 -Node: Information about system dependencies144454 -Node: Status145370 -Node: Rejected ideas145825 -Node: TODO148206 -Node: Credits for the source-registry148391 -Node: Controlling where ASDF saves compiled files148926 -Ref: Controlling where ASDF saves compiled files-Footnote-1150338 -Node: Output Configurations150382 -Ref: Output Configurations-Footnote-1153243 -Node: Output Backward Compatibility153309 -Node: Output Configuration DSL156035 -Node: Output Configuration Directories161490 -Node: Output Shell-friendly syntax for configuration163047 -Node: Semantics of Output Translations164566 -Node: Output Caching Results166135 -Node: Output location API166615 -Node: Credits for output translations169037 -Node: Error handling169557 -Node: Miscellaneous additional functionality170398 -Node: Controlling file compilation170870 -Node: Controlling source file character encoding174136 -Node: Miscellaneous Functions180953 -Ref: system-relative-pathname181250 -Ref: Miscellaneous Functions-Footnote-1187697 -Node: Some Utility Functions187808 -Node: Getting the latest version198586 -Node: FAQ199531 -Node: Where do I report a bug?199926 -Node: Mailing list200291 -Node: What has changed between ASDF 1 ASDF 2 and ASDF 3?200626 -Node: What are ASDF 1 2 3?202800 -Node: How do I detect the ASDF version?203841 -Node: ASDF can portably name files in subdirectories206148 -Node: Output translations207698 -Node: Source Registry Configuration208725 -Node: Usual operations are made easier to the user210352 -Node: Many bugs have been fixed210938 -Node: ASDF itself is versioned212770 -Node: ASDF can be upgraded213645 -Node: Decoupled release cycle214797 -Node: Pitfalls of the transition to ASDF 2215726 -Node: Pitfalls of the upgrade to ASDF 3219996 -Ref: Pitfalls of the upgrade to ASDF 3-Footnote-1224365 -Node: What happened to the bundle operations224535 -Node: Issues with installing the proper version of ASDF225700 -Node: My Common Lisp implementation comes with an outdated version of ASDF. What to do?226171 -Node: I'm a Common Lisp implementation vendor. When and how should I upgrade ASDF?227104 -Node: Issues with configuring ASDF230987 -Node: How can I customize where fasl files are stored?231362 -Node: How can I wholly disable the compiler output cache?232455 -Node: Issues with using and extending ASDF to define systems233834 -Node: How can I cater for unit-testing in my system?234631 -Node: How can I cater for documentation generation in my system?235519 -Node: How can I maintain non-Lisp (e.g. C) source files?236040 -Ref: report-bugs236472 -Node: I want to put my module's files at the top level. How do I do this?236472 -Node: How do I create a system definition where all the source files have a .cl extension?239622 -Node: How do I mark a source file to be loaded only and not compiled?241595 -Node: How do I work with readtables?242591 -Node: How can I capture ASDF's output?246318 -Node: LOAD-PATHNAME has a weird value246789 -Node: ASDF development FAQs248275 -Node: How do I run the tests interactively in a REPL?248514 -Node: Ongoing Work250380 -Node: Bibliography250659 -Node: Concept Index254130 -Node: Function and Class Index260989 -Node: Variable Index272763 +Node: Introduction7796 +Node: Quick start summary10155 +Node: Loading ASDF11862 +Node: Loading a pre-installed ASDF12164 +Ref: Loading a pre-installed ASDF-Footnote-113977 +Node: Checking whether ASDF is loaded14159 +Node: Upgrading ASDF15073 +Node: Replacing your implementation's ASDF16061 +Node: Loading ASDF from source17485 +Node: Configuring ASDF18586 +Node: Configuring ASDF to find your systems19359 +Ref: Configuring ASDF to find your systems-Footnote-122664 +Ref: Configuring ASDF to find your systems-Footnote-222911 +Ref: Configuring ASDF to find your systems-Footnote-323193 +Node: Configuring ASDF to find your systems --- old style23654 +Ref: Configuring ASDF to find your systems --- old style-Footnote-127258 +Ref: Configuring ASDF to find your systems --- old style-Footnote-227490 +Ref: Configuring ASDF to find your systems --- old style-Footnote-328257 +Node: Configuring where ASDF stores object files28413 +Node: Resetting the ASDF configuration29816 +Node: Using ASDF30873 +Node: Loading a system31084 +Node: Convenience Functions32101 +Ref: Convenience Functions-Footnote-137461 +Node: Moving on37539 +Node: Defining systems with defsystem37910 +Node: The defsystem form38338 +Node: A more involved example41744 +Ref: A more involved example-Footnote-148726 +Node: The defsystem grammar49408 +Ref: if-feature-option67366 +Node: Other code in .asd files68909 +Node: The package-inferred-system extension70045 +Node: The object model of ASDF74312 +Ref: The object model of ASDF-Footnote-176643 +Ref: The object model of ASDF-Footnote-276995 +Node: Operations77322 +Ref: operate78427 +Ref: make-operation81163 +Node: Predefined operations of ASDF81584 +Ref: test-op83698 +Node: Creating new operations91587 +Node: Components96800 +Ref: System names100284 +Ref: Components-Footnote-1104956 +Ref: Components-Footnote-2105252 +Node: Common attributes of components105574 +Ref: required-features107136 +Node: Pre-defined subclasses of component112983 +Node: Creating new component types115417 +Node: Dependencies116707 +Node: Functions118578 +Node: Controlling where ASDF searches for systems120412 +Node: Configurations121034 +Node: Truenames and other dangers124509 +Node: XDG base directory125795 +Node: Backward Compatibility127209 +Node: Configuration DSL127925 +Node: Configuration Directories133480 +Node: The here directive135307 +Node: Shell-friendly syntax for configuration137200 +Node: Search Algorithm138217 +Node: Caching Results140087 +Node: Configuration API143335 +Node: Introspection145374 +Node: *source-registry-parameter* variable145638 +Node: Information about system dependencies146207 +Node: Status147123 +Node: Rejected ideas147578 +Node: TODO149959 +Node: Credits for the source-registry150144 +Node: Controlling where ASDF saves compiled files150679 +Ref: Controlling where ASDF saves compiled files-Footnote-1152091 +Node: Output Configurations152135 +Ref: Output Configurations-Footnote-1154996 +Node: Output Backward Compatibility155062 +Node: Output Configuration DSL157788 +Node: Output Configuration Directories163243 +Node: Output Shell-friendly syntax for configuration164800 +Node: Semantics of Output Translations166319 +Node: Output Caching Results167888 +Node: Output location API168368 +Node: Credits for output translations170790 +Node: Error handling171310 +Node: Miscellaneous additional functionality172151 +Node: Controlling file compilation172623 +Node: Controlling source file character encoding175889 +Node: Miscellaneous Functions182706 +Ref: system-relative-pathname183003 +Ref: Miscellaneous Functions-Footnote-1189450 +Node: Some Utility Functions189561 +Node: Getting the latest version200339 +Node: FAQ201284 +Node: Where do I report a bug?201679 +Node: Mailing list202044 +Node: What has changed between ASDF 1 ASDF 2 and ASDF 3?202379 +Node: What are ASDF 1 2 3?204553 +Node: How do I detect the ASDF version?205594 +Node: ASDF can portably name files in subdirectories207901 +Node: Output translations209451 +Node: Source Registry Configuration210478 +Node: Usual operations are made easier to the user212105 +Node: Many bugs have been fixed212691 +Node: ASDF itself is versioned214523 +Node: ASDF can be upgraded215398 +Node: Decoupled release cycle216550 +Node: Pitfalls of the transition to ASDF 2217479 +Node: Pitfalls of the upgrade to ASDF 3221749 +Ref: reinitializeASDFAfterUpgrade225451 +Ref: Pitfalls of the upgrade to ASDF 3-Footnote-1226323 +Node: What happened to the bundle operations226493 +Node: Issues with installing the proper version of ASDF227658 +Node: My Common Lisp implementation comes with an outdated version of ASDF. What to do?228219 +Node: I'm a Common Lisp implementation vendor. When and how should I upgrade ASDF?229152 +Node: After upgrading ASDF233064 +Node: Issues with configuring ASDF234715 +Node: How can I customize where fasl files are stored?235090 +Node: How can I wholly disable the compiler output cache?236183 +Node: Issues with using and extending ASDF to define systems237562 +Node: How can I cater for unit-testing in my system?238359 +Node: How can I cater for documentation generation in my system?239247 +Node: How can I maintain non-Lisp (e.g. C) source files?239768 +Ref: report-bugs240200 +Node: I want to put my module's files at the top level. How do I do this?240200 +Node: How do I create a system definition where all the source files have a .cl extension?243350 +Node: How do I mark a source file to be loaded only and not compiled?245323 +Node: How do I work with readtables?246319 +Node: How can I capture ASDF's output?250046 +Node: LOAD-PATHNAME has a weird value250517 +Node: ASDF development FAQs252003 +Node: How do I run the tests interactively in a REPL?252242 +Node: Ongoing Work253809 +Node: Bibliography254088 +Node: Concept Index257559 +Node: Function and Class Index264554 +Node: Variable Index276328 End Tag Table
===================================== src/contrib/asdf/doc/asdf.pdf ===================================== Binary files a/src/contrib/asdf/doc/asdf.pdf and b/src/contrib/asdf/doc/asdf.pdf differ
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/commit/aba5f454439ef0bd28feb9b605...
--- View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/commit/aba5f454439ef0bd28feb9b605... You're receiving this email because of your account on gitlab.common-lisp.net.