Raymond Toy pushed to branch master at cmucl / cmucl
Commits: 005cf179 by Raymond Toy at 2017-01-11T21:55:53-08:00 Update asdf to version 3.2.0.
- - - - -
5 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 - src/general-info/release-21c.txt
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 @@ -6,11 +6,11 @@ for Common Lisp programs and libraries. You can find the latest version of this manual at https://common-lisp.net/project/asdf/asdf.html.
-ASDF Copyright (C) 2001-2015 Daniel Barlow and contributors. +ASDF Copyright (C) 2001-2016 Daniel Barlow and contributors.
-This manual Copyright (C) 2001-2015 Daniel Barlow and contributors. +This manual Copyright (C) 2001-2016 Daniel Barlow and contributors.
-This manual revised (C) 2009-2015 Robert P. Goldman and Francois-Rene Rideau. +This manual revised (C) 2009-2016 Robert P. Goldman and Francois-Rene Rideau.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -127,11 +127,11 @@ ul.no-bullet {list-style: none} <li><a name="toc-Pathname-specifiers" href="#Pathname-specifiers">6.3.7 Pathname specifiers</a></li> <li><a name="toc-Version-specifiers" href="#Version-specifiers">6.3.8 Version specifiers</a></li> <li><a name="toc-Require" href="#Require">6.3.9 Require</a></li> - <li><a name="toc-Using-logical-pathnames" href="#Using-logical-pathnames">6.3.10 Using logical pathnames</a></li> - <li><a name="toc-Serial-dependencies" href="#Serial-dependencies">6.3.11 Serial dependencies</a></li> - <li><a name="toc-Source-location-_0028_003apathname_0029" href="#Source-location-_0028_003apathname_0029">6.3.12 Source location (<code>:pathname</code>)</a></li> - <li><a name="toc-if_002dfeature-option" href="#if_002dfeature-option">6.3.13 if-feature option</a></li> - <li><a name="toc-if_002dcomponent_002ddep_002dfails-option" href="#if_002dcomponent_002ddep_002dfails-option">6.3.14 if-component-dep-fails option</a></li> + <li><a name="toc-Feature-dependencies" href="#Feature-dependencies">6.3.10 Feature dependencies</a></li> + <li><a name="toc-Using-logical-pathnames" href="#Using-logical-pathnames">6.3.11 Using logical pathnames</a></li> + <li><a name="toc-Serial-dependencies" href="#Serial-dependencies">6.3.12 Serial dependencies</a></li> + <li><a name="toc-Source-location-_0028_003apathname_0029" href="#Source-location-_0028_003apathname_0029">6.3.13 Source location (<code>:pathname</code>)</a></li> + <li><a name="toc-if_002dfeature-option" href="#if_002dfeature-option">6.3.14 if-feature option</a></li> <li><a name="toc-feature-requirement" href="#feature-requirement">6.3.15 feature requirement</a></li> </ul></li> <li><a name="toc-Other-code-in-_002easd-files-1" href="#Other-code-in-_002easd-files">6.4 Other code in .asd files</a></li> @@ -255,6 +255,7 @@ ul.no-bullet {list-style: none} <li><a name="toc-How-should-my-library-make-a-readtable-available-to-other-systems_003f" href="#How-should-my-library-make-a-readtable-available-to-other-systems_003f">13.6.7.2 How should my library make a readtable available to other systems?</a></li> </ul></li> <li><a name="toc-How-can-I-capture-ASDF_0027s-output_003f-1" href="#How-can-I-capture-ASDF_0027s-output_003f">13.6.8 How can I capture ASDF’s output?</a></li> + <li><a name="toc-_002aLOAD_002dPATHNAME_002a-and-_002aLOAD_002dTRUENAME_002a-have-weird-values_002c-help_0021" href="#LOAD_002dPATHNAME-has-a-weird-value">13.6.9 *LOAD-PATHNAME* and *LOAD-TRUENAME* have weird values, help!</a></li> </ul></li> <li><a name="toc-ASDF-development-FAQs-1" href="#ASDF-development-FAQs">13.7 ASDF development FAQs</a> <ul class="no-bullet"> @@ -275,7 +276,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.1.6.14 +<p>Manual for Version 3.2.0 </p>
<p>This manual describes ASDF, a system definition facility @@ -284,11 +285,11 @@ for Common Lisp programs and libraries. <p>You can find the latest version of this manual at <a href="https://common-lisp.net/project/asdf/asdf.html">https://common-lisp.net/project/asdf/asdf.html</a>. </p> -<p>ASDF Copyright © 2001-2015 Daniel Barlow and contributors. +<p>ASDF Copyright © 2001-2016 Daniel Barlow and contributors. </p> -<p>This manual Copyright © 2001-2015 Daniel Barlow and contributors. +<p>This manual Copyright © 2001-2016 Daniel Barlow and contributors. </p> -<p>This manual revised © 2009-2015 Robert P. Goldman and Francois-Rene Rideau. +<p>This manual revised © 2009-2016 Robert P. Goldman and Francois-Rene Rideau. </p> <p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -679,7 +680,8 @@ may already have configured system-managed libraries for you.
- +<p>Novices may skip this section. +</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>. @@ -697,7 +699,7 @@ When used, it takes precedence over the above source-registry.<a name="DOCF5" hr </p> <p>For example, let’s say you want ASDF to find the <samp>.asd</samp> file <samp>/home/me/src/foo/foo.asd</samp>. -In your lisp initialization file, you could have the following: +In your Lisp initialization file, you could have the following: </p> <div class="lisp"> <pre class="lisp">(require "asdf") @@ -1291,6 +1293,7 @@ other-component-type := symbol-by-name # which is used in :in-order-to dependency-def := simple-component-name | ( :feature <var>feature-expression</var> dependency-def ) + # (see <a href="#The-defsystem-grammar">Feature dependencies</a>) | ( :version simple-component-name version-specifier ) | ( :require module-name )
@@ -1309,8 +1312,6 @@ pathname-specifier := pathname | string | symbol method-form := (operation-name qual lambda-list &rest body) qual := method qualifier?
-component-dep-fail-option := :fail | :try-next | :ignore - feature-expression := keyword | (:and <var>feature-expression</var>*) | (:or <var>feature-expression</var>*) @@ -1537,9 +1538,29 @@ rather than <code>#+<em>implementation-name</em></code> to only depend on the specified module on the specific implementation that provides it. See <a href="#if_002dfeature_002doption">if-feature-option</a>. </p> +<a name="Feature-dependencies"></a> +<h4 class="subsection">6.3.10 Feature dependencies</h4> +<a name="index-_003afeature-dependencies"></a>
+<p>A feature dependency is of the form +<code>(:feature <var>feature-expression</var> <var>dependency</var>)</code> +If the <var>feature-expression</var> is satisfied by the running lisp at the +time the system definition is parsed, then the <var>dependency</var> will be +added to the system’s dependencies. If the <var>feature-expression</var> is +<em>not</em> satisfied, then the feature dependency form is ignored. +</p> +<p>Note that this means that <code>:feature</code> <strong>cannot</strong> 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)</code> +to require that a system only be used on SBCL. +</p> +<p>Feature dependencies are not to be confused with the obsolete +feature requirement (see <a href="#The-defsystem-grammar">feature requirement</a>), or +with <code>if-feature</code>. +</p> <a name="Using-logical-pathnames"></a> -<h4 class="subsection">6.3.10 Using logical pathnames</h4> +<h4 class="subsection">6.3.11 Using logical pathnames</h4> <a name="index-logical-pathnames"></a>
<p>We do not generally recommend the use of logical pathnames, @@ -1595,7 +1616,7 @@ underscores, dots or CamelCase in pathnames. </p>
<a name="Serial-dependencies"></a> -<h4 class="subsection">6.3.11 Serial dependencies</h4> +<h4 class="subsection">6.3.12 Serial dependencies</h4> <a name="index-serial-dependencies"></a>
<p>If the <code>:serial t</code> option is specified for a module, @@ -1618,7 +1639,7 @@ This is done as if by <code>:depends-on</code>.
<a name="Source-location-_0028_003apathname_0029"></a> -<h4 class="subsection">6.3.12 Source location (<code>:pathname</code>)</h4> +<h4 class="subsection">6.3.13 Source location (<code>:pathname</code>)</h4>
<p>The <code>:pathname</code> option is optional in all cases for systems defined via <code>defsystem</code>, and generally is unnecessary. In the @@ -1664,7 +1685,7 @@ from within an editor without clobbering its source location) </li></ul>
<a name="if_002dfeature-option"></a> -<h4 class="subsection">6.3.13 if-feature option</h4> +<h4 class="subsection">6.3.14 if-feature option</h4> <a name="index-_003aif_002dfeature-component-option"></a> <a name="if_002dfeature_002doption"></a> <p>This option allows you to specify a feature expression to be evaluated @@ -1689,14 +1710,6 @@ been performed. <p>This option was added in ASDF 3. For more information, See <a href="#required_002dfeatures">Required features</a>. </p> -<a name="if_002dcomponent_002ddep_002dfails-option"></a> -<h4 class="subsection">6.3.14 if-component-dep-fails option</h4> -<a name="index-_003aif_002dcomponent_002ddep_002dfails-component-option"></a> -<p>This option was removed in ASDF 3. -Its semantics was limited in purpose and dubious to explain, -and its implementation was breaking a hole into the ASDF object model. -Please use the <code>if-feature</code> option instead. -</p> <a name="feature-requirement"></a> <h4 class="subsection">6.3.15 feature requirement</h4> <p>This requirement was removed in ASDF 3.1. Please do not use it. In @@ -1854,7 +1867,7 @@ where the <samp>.asd</samp> file resides.
<p>ASDF is designed in an object-oriented way from the ground up. Both a system’s structure and the operations that can be performed on systems -follow a extensible protocol, allowing programmers to add new behaviours to ASDF. +follow an extensible protocol, allowing programmers to add new behaviours to ASDF. For example, <code>cffi</code> adds support for special FFI description files that interface with C libraries and for wrapper files that embed C code in Lisp. <code>asdf-jar</code> supports creating Java JAR archives in ABCL. @@ -1926,20 +1939,21 @@ discuss these in turn below. <dd><p><code>operate</code> invokes <var>operation</var> on <var>system</var>. <code>oos</code> is a synonym for <code>operate</code> (it stands for operate-on-system). </p> -<p><var>operation</var> is a symbol that is passed, -along with the supplied <var>initargs</var>, -to <code>make-operation</code> (which will call <code>make-instance</code>) +<p><var>operation</var> is an operation designator: +it can be an operation object itself, or, typically, +a symbol that is passed to <code>make-operation</code> (which will call <code>make-instance</code>), to create the operation object. -<var>component</var> is a component designator, -usually a string or symbol that designates a system, -sometimes a list of strings or symbols that designate a subcomponent of a system. +<var>component</var> is a component designator: +it can be a component object itself, or, typically, +a string or symbol (to be <code>string-downcase</code>d) that names a system, +more rarely a list of strings or symbols that designate a subcomponent of a system. </p> -<p>The <var>initargs</var> are passed to the <code>make-instance</code> call -when creating the operation object. +<p>The ability to pass <var>initargs</var> to <code>make-operation</code> is now deprecated, and will be removed. +For more details, see <a href="#make_002doperation">make-operation</a>. Note that dependencies may cause the operation to invoke other operations on the system or its components: -the new operations will be created -with the same <var>initargs</var> as the original one. +the new operations may or may not be created +with the same <var>initargs</var> as the original one (for the moment). </p> <p>If <var>force</var> is <code>:all</code>, then all systems are forced to be recompiled even if not modified since last compilation. @@ -1973,6 +1987,20 @@ See <a href="#Miscellaneous-Functions">Miscellaneous Functions</a>.
</dd></dl>
+<dl> +<dt><a name="index-make_002doperation"></a>Function: <strong><code>make-operation</code></strong> <em><var>operation-class</var> &rest <var>initargs</var></em></dt> +<dd><a name="make_002doperation"></a> +<p>The <var>initargs</var> are passed to <code>make-instance</code> call +when creating the operation object. +</p> +<p><strong>Note:</strong><var>initargs</var> for <code>operation</code>s are now deprecated, +and will be removed from ASDF in the near future. +</p> +<p><strong>Note:</strong> <code>operation</code> instances must <strong>never</strong> be created +using <code>make-instance</code> directly: only through +<code>make-operation</code>. Attempts to directly make <code>operation</code> +instances will cause a run-time error. +</p></dd></dl>
<hr> @@ -2490,8 +2518,8 @@ time when the <var>previous</var> system definition was loaded. but system <code>foo</code> was previously loaded from <samp>/previous/path/to/foo.asd</samp> then <var>locate-system</var> will return the following values: </p><ol> -<li> <var>foundp</var> will be <code>T</code>, -</li><li> <var>found-system</var> will be <code>NIL</code>, +<li> <var>foundp</var> will be <code>t</code>, +</li><li> <var>found-system</var> will be <code>nil</code>, </li><li> <var>pathname</var> will be <code>#p"/current/path/to/foo.asd"</code>, </li><li> <var>previous</var> will be an object of type <code>SYSTEM</code> with <code>system-source-file</code> slot value of @@ -3972,28 +4000,37 @@ or namestring in an <code>:include</code> directive, e.g.: <a name="Shell_002dfriendly-syntax-for-configuration-2"></a> <h3 class="section">9.5 Shell-friendly syntax for configuration</h3>
-<p>When considering environment variable <code>ASDF_OUTPUT_TRANSLATIONS</code> -ASDF will skip to the next configuration if it’s an empty string. -It will <code>READ</code> the string as an SEXP in the DSL -if it begins with a paren <code>(</code> -and it will be interpreted as a list of directories. -Directories should come by pairs, indicating a mapping directive. +<p>When processing the environment variable +<code>ASDF_OUTPUT_TRANSLATIONS</code>: +</p><ul> +<li> ASDF will skip to the next configuration if it’s an empty string. +</li><li> ASDF will <code>READ</code> the string as an SEXP in the DSL, if it +begins with a parenthesis <code>(</code>. +</li><li> Otherwise ASDF will interpret the value as a list of directories +(see below). +</li></ul> + +<p>In the directory list format, +directories should come in pairs, each pair indicating a mapping directive. Entries are separated -by a <code>:</code> (colon) on Unix platforms (including cygwin), +by a <code>:</code> (colon) on Unix platforms (including Mac and cygwin), and by a <code>;</code> (semicolon) on other platforms (mainly, Windows). </p> <p>The magic empty entry, if it comes in what would otherwise be the first entry in a pair, -indicates the splicing of inherited configuration. -If it comes as the second entry in a pair, -it indicates that the directory specified first is to be left untranslated +indicates the splicing of inherited configuration; +the next entry (if any) then starts a new pair. +If the second entry in a pair is empty, +it indicates that the directory in the first entry is to be left untranslated (which has the same effect as if the directory had been repeated). -Thus <code>"/foo:/bar::/baz:"</code> means that -things under directory <samp>/foo/</samp> -are translated to be under <samp>/bar/</samp>, -then include the inherited configuration, -then specify that things under directory <samp>/baz/</samp> are not translated. </p> +<p>For example, <code>"/foo:/bar::/baz:"</code> means: +specify that outputs for things under directory <samp>/foo/</samp> +are translated to be under <samp>/bar/</samp>; +then include the inherited configuration; +then specify that outputs for things under directory <samp>/baz/</samp> are not translated. +</p> + <hr> <a name="Semantics-of-Output-Translations"></a> <a name="Semantics-of-Output-Translations-1"></a> @@ -4292,7 +4329,7 @@ to protect any <code>:encoding <em>encoding</em></code> statement, as in <code>#+asdf-unicode :encoding #+asdf-unicode :utf-8</code>. We recommend that you avoid using unprotected <code>:encoding</code> specifications until after ASDF 2.21 or later becomes widespread. -As of May 2015, all maintained implementations provide ASDF 3, +As of May 2016, all maintained implementations provide ASDF 3.1, so you may prudently start using this and other features without such protection. </p> <p>While it offers plenty of hooks for extension, @@ -4442,12 +4479,16 @@ from what it does in <samp>header.lisp</samp> and <samp>upgrade.lisp</samp>. </p></dd></dl>
<dl> -<dt><a name="index-register_002dpreloaded_002dsystem"></a>Function: <strong>register-preloaded-system</strong> <em>name &rest keys</em></dt> +<dt><a name="index-register_002dpreloaded_002dsystem"></a>Function: <strong>register-preloaded-system</strong> <em>name &rest keys &key version &allow-other-keys</em></dt> <dd><p>A system with name <var>name</var>, created by <code>make-instance</code> with extra keys <var>keys</var> (e.g. <code>:version</code>), is registered as <em>preloaded</em>. -That is, its code has already been loaded into the current image, +If <var>version</var> is <code>t</code> (default), then the version is copied from the defined system +of the same name (if registered) or else is <code>nil</code> +(this automatic copy of version is only available starting since ASDF 3.1.8). +</p> +<p>A preloaded system is considered as having already been loaded into the current image, and if at some point some other system <code>:depends-on</code> it yet no source code is found, it is considered as already provided, and ASDF will not raise a <code>missing-component</code> error. @@ -4456,25 +4497,35 @@ and ASDF will not raise a <code>missing-component</code> error. as fasls with either <code>compile-bundle-op</code> or <code>monolithic-compile-bundle-op</code>, and want to register systems so that dependencies will work uniformly whether you’re using your software from source or from fasl. +</p> +<p>Note that if the system was already defined or loaded from source code, +its build information will remain active until you call <code>clear-system</code> on it, +at which point a system without build information will be registered in its place. </p></dd></dl>
<dl> <dt><a name="index-register_002dimmutable_002dsystem-1"></a>Function: <strong>register-immutable-system</strong> <em>name &rest keys</em></dt> -<dd><p>A system with name <var>name</var>, -created by <code>make-instance</code> with extra keys <var>keys</var> -(e.g. <code>:version</code>), -is registered as <em>immutable</em>. -That is, its code has already been loaded into the current image, -and if at some point some other system <code>:depends-on</code> it, -it is considered as already provided, and -no attempt will be made to search for an updated version from the source-registry -or any other method. -There will be no search for an <samp>.asd</samp> file, and no <code>missing-component</code> error. -</p> -<p>This function (available since ASDF 3.1.5) is particularly useful if -you distribute a large body of code as a precompiled image, +<dd><p>A system with name <var>name</var> is registered as preloaded, +and additionally is marked as <em>immutable</em>: +that is, attempts to compile or load it will be succeed +without actually reading, creating or loading any file, +as if the system was passed as a <code>force-not</code> argument +to all calls to <code>plan</code> or <code>operate</code>. +There will be no search for an updated <samp>.asd</samp> file +to override the loaded version, +whether from the source-register or any other method. +</p> +<p>If a <var>version</var> keyword argument is specified as <code>t</code> or left unspecified, +then the version is copied from the defined system +of the same name (if registered) or else is <code>nil</code>. +This automatic copy of version is available starting +since immutable systems have been available in ASDF 3.1.5. +</p> +<p>This function, available since ASDF 3.1.5, is particularly useful +if you distribute a large body of code as a precompiled image, and want to allow users to extend the image with further extension systems, -but without making thousands of filesystem requests looking for inexistent (or worse, out of date) source code +but without making thousands of filesystem requests looking for inexistent +(or worse, out of date) source code for all the systems that came bundled with the image but aren’t distributed as source code to regular users. <a name="index-immutable-systems-1"></a> @@ -4508,15 +4559,15 @@ while others (like SBCL) will make an attempt at invoking a POSIX shell <h3 class="section">11.4 Some Utility Functions</h3>
<p>The below functions are not exported by ASDF itself, but by UIOP, available since ASDF 3. -Some of them have precursors in ASDF 2, but we recommend -you rely on ASDF 3 for active developments. +Some of them have precursors in ASDF 2, but we recommend that for active developments, +you should rely on the package UIOP as included in ASDF 3. UIOP provides many, many more utility functions, and we recommend -you read its README and sources for more information. +you read its <samp>README.md</samp> and sources for more information. </p>
<dl> <dt><a name="index-parse_002dunix_002dnamestring"></a>Function: <strong>parse-unix-namestring</strong> <em>name &key type defaults dot-dot ensure-directory &allow-other-keys</em></dt> -<dd><p>Coerce NAME into a PATHNAME using standard Unix syntax. +<dd><p>Coerce <var>name</var> into a <var>pathname</var> using standard Unix syntax. </p> <p>Unix syntax is used whether or not the underlying system is Unix; on non-Unix systems it is only usable for relative pathnames. @@ -4707,7 +4758,7 @@ which defaults to <code>0</code>, extracting the first line. A number will extract the corresponding line. See the documentation for <code>uiop:access-at</code>.
-</li><li> If the object is <code>:forms</code>, the content is captured as a list of S-expressions, +</li><li> If the object is <code>:forms</code>, the content is captured as a list of s-expressions, as read by the Lisp reader. If the <var>count</var> argument is provided, it is a maximum count of lines to be read. @@ -5256,7 +5307,7 @@ 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 or later (since May 2015), +</li><li> 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. (see <a href="#Replacing-your-implementation_0027s-ASDF">Replacing your implementation's ASDF</a>): @@ -5309,14 +5360,14 @@ and lose configuration as they do. <p><code>asdf-ecl</code> and its short-lived successor <code>asdf-bundle</code> are no more, having been replaced by code now built into ASDF 3. Moreover, the name of the bundle operations has changed since ASDF 3.1.3. +Starting with ASDF 3.2.0, <code>load-system</code> +will once again use <code>load-bundle-op</code> instead of <code>load-op</code> on ECL, +as originally intended by <code>asdf-ecl</code> authors, but disabled for a long time +due to bugs in both ECL and ASDF. </p> -<p>And yet, the feature is not enabled to be used by <code>load-system</code> by default on ECL as originally intended, -because of a bug in ECL itself found during testing. -</p> - -<p>Some of the bundle operations were renamed after ASDF 3.1.3, and the old -names have been removed. Old bundle operations, and their modern -equivalents are: +<p>Note that some of the bundle operations were renamed after ASDF 3.1.3, +and the old names have been removed. +Old bundle operations, and their modern equivalents are: </p> <ul> <li> <code>fasl-op</code> is now <code>compile-bundle-op</code> @@ -5769,7 +5820,36 @@ to eschew using such an important library anymore. <code>*standard-output*</code>, so rebinding that stream around calls to <code>asdf:operate</code> should redirect all output from ASDF operations. </p> +<hr> +<a name="LOAD_002dPATHNAME-has-a-weird-value"></a> +<a name="g_t_002aLOAD_002dPATHNAME_002a-and-_002aLOAD_002dTRUENAME_002a-have-weird-values_002c-help_0021"></a> +<h4 class="subsection">13.6.9 *LOAD-PATHNAME* and *LOAD-TRUENAME* have weird values, help!</h4> +<a name="index-_002aLOAD_002dPATHNAME_002a"></a> +<a name="index-_002aLOAD_002dTRUENAME_002a"></a> + +<p>Conventional Common Lisp code may use <code>*LOAD-TRUENAME*</code> or <code>*LOAD-PATHNAME*</code> to find +files adjacent to source files. This will generally <em>not</em> work in +ASDF-loaded systems. Recall that ASDF relocates the FASL files it +builds, typically to a special cache directory. Thus the value of +<code>*LOAD-PATHNAME*</code> and <code>*LOAD-TRUENAME*</code> at load time, when ASDF is loading your system, +will typically be a pathname in that cache directory, and useless to you +for finding other system components. +</p> +<p>There are two ways to work around this problem: +</p><ol> +<li> <a name="index-system_002drelative_002dpathname-1"></a> +Use the <code>system-relative-pathname</code> function. This can readily be +used from outside the system, but it is probably not good software +engineering to require a source file <em>of</em> a system to know what +system it is going to be part of. Contained objects should not have to +know their containers. +</li><li> Store the pathname at compile time, so that you get the pathname of the +source file, which is presumably what you want. To do this, you can +capture the value of <code>(or *compile-file-pathname* *load-truename*)</code> +(or <code>*LOAD-PATHNAME*</code>, if you prefer) +in a macro expansion or other compile-time evaluated context.
+</li></ol>
<hr> <a name="ASDF-development-FAQs"></a> @@ -5857,7 +5937,8 @@ see the <samp>TODO</samp> file in the source repository. <a href="http://xach.livejournal.com/">http://xach.livejournal.com/</a> </li><li> Francois-Rene Rideau and Robert Goldman: “Evolving ASDF: More Cooperation, Less Coordination”, 2010. - This article describes the main issues solved by ASDF 2. + This article describes the main issues solved by ASDF 2, + and exposes its design principles. <a href="https://common-lisp.net/project/asdf/doc/ilc2010draft.pdf">https://common-lisp.net/project/asdf/doc/ilc2010draft.pdf</a> <a href="https://gitlab.common-lisp.org/asdf/ilc2010">https://gitlab.common-lisp.org/asdf/ilc2010</a> </li><li> Francois-Rene Rideau and Spencer Brody: @@ -5957,7 +6038,7 @@ see the <samp>TODO</samp> file in the source repository. <tr><td></td><td valign="top"><a href="#index-_003adefsystem_002ddepends_002don">:defsystem-depends-on</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-_003adirectory-source-config-directive">:directory source config directive</a>:</td><td> </td><td valign="top"><a href="#Configuration-DSL">Configuration DSL</a></td></tr> <tr><td></td><td valign="top"><a href="#index-_003aexclude-source-config-directive">:exclude source config directive</a>:</td><td> </td><td valign="top"><a href="#Configuration-DSL">Configuration DSL</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-_003aif_002dcomponent_002ddep_002dfails-component-option">:if-component-dep-fails component option</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-_003afeature-dependencies">:feature dependencies</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-_003aif_002dfeature-component-option">:if-feature component option</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-_003aignore_002dinvalid_002dentries-source-config-directive">:ignore-invalid-entries source config directive</a>:</td><td> </td><td valign="top"><a href="#Configuration-DSL">Configuration DSL</a></td></tr> <tr><td></td><td valign="top"><a href="#index-_003ainclude-source-config-directive">:include source config directive</a>:</td><td> </td><td valign="top"><a href="#Configuration-DSL">Configuration DSL</a></td></tr> @@ -6173,6 +6254,7 @@ see the <samp>TODO</samp> file in the source repository. <tr><td colspan="4"> <hr></td></tr> <tr><th><a name="Function-and-Class-Index_fn_letter-M">M</a></th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-make"><code>make</code></a>:</td><td> </td><td valign="top"><a href="#Convenience-Functions">Convenience Functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-make_002doperation"><code><code>make-operation</code></code></a>:</td><td> </td><td valign="top"><a href="#Operations">Operations</a></td></tr> <tr><td></td><td valign="top"><a href="#index-merge_002dpathnames_002a"><code>merge-pathnames*</code></a>:</td><td> </td><td valign="top"><a href="#Some-Utility-Functions">Some Utility Functions</a></td></tr> <tr><td></td><td valign="top"><a href="#index-module"><code>module</code></a>:</td><td> </td><td valign="top"><a href="#Pre_002ddefined-subclasses-of-component">Pre-defined subclasses of component</a></td></tr> <tr><td></td><td valign="top"><a href="#index-monolithic_002dbinary_002dop-_0028obsolete_0029"><code>monolithic-binary-op (obsolete)</code></a>:</td><td> </td><td valign="top"><a href="#What-happened-to-the-bundle-operations">What happened to the bundle operations</a></td></tr> @@ -6218,6 +6300,7 @@ see the <samp>TODO</samp> file in the source repository. <tr><td></td><td valign="top"><a href="#index-system_002ddefsystem_002ddepends_002don"><code>system-defsystem-depends-on</code></a>:</td><td> </td><td valign="top"><a href="#Information-about-system-dependencies">Information about system dependencies</a></td></tr> <tr><td></td><td valign="top"><a href="#index-system_002ddepends_002don"><code>system-depends-on</code></a>:</td><td> </td><td valign="top"><a href="#Information-about-system-dependencies">Information about system dependencies</a></td></tr> <tr><td></td><td valign="top"><a href="#index-system_002drelative_002dpathname"><code>system-relative-pathname</code></a>:</td><td> </td><td valign="top"><a href="#Miscellaneous-Functions">Miscellaneous Functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-system_002drelative_002dpathname-1"><code>system-relative-pathname</code></a>:</td><td> </td><td valign="top"><a href="#LOAD_002dPATHNAME-has-a-weird-value">LOAD-PATHNAME has a weird value</a></td></tr> <tr><td></td><td valign="top"><a href="#index-system_002dsource_002ddirectory"><code>system-source-directory</code></a>:</td><td> </td><td valign="top"><a href="#Miscellaneous-Functions">Miscellaneous Functions</a></td></tr> <tr><td></td><td valign="top"><a href="#index-system_002dweakly_002ddepends_002don"><code>system-weakly-depends-on</code></a>:</td><td> </td><td valign="top"><a href="#Information-about-system-dependencies">Information about system dependencies</a></td></tr> <tr><td colspan="4"> <hr></td></tr> @@ -6283,7 +6366,9 @@ see the <samp>TODO</samp> file in the source repository. <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> <tr><td></td><td valign="top"><a href="#index-_002afeatures_002a-1"><code>*features*</code></a>:</td><td> </td><td valign="top"><a href="#Introduction">Introduction</a></td></tr> <tr><td></td><td valign="top"><a href="#index-_002aimage_002ddump_002dhook_002a"><code>*image-dump-hook*</code></a>:</td><td> </td><td valign="top"><a href="#Resetting-the-ASDF-configuration">Resetting the ASDF configuration</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-_002aLOAD_002dPATHNAME_002a"><code>*LOAD-PATHNAME*</code></a>:</td><td> </td><td valign="top"><a href="#LOAD_002dPATHNAME-has-a-weird-value">LOAD-PATHNAME has a weird value</a></td></tr> <tr><td></td><td valign="top"><a href="#index-_002aload_002dsystem_002doperation_002a"><code>*load-system-operation*</code></a>:</td><td> </td><td valign="top"><a href="#Convenience-Functions">Convenience Functions</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-_002aLOAD_002dTRUENAME_002a"><code>*LOAD-TRUENAME*</code></a>:</td><td> </td><td valign="top"><a href="#LOAD_002dPATHNAME-has-a-weird-value">LOAD-PATHNAME has a weird value</a></td></tr> <tr><td></td><td valign="top"><a href="#index-_002anil_002dpathname_002a"><code>*nil-pathname*</code></a>:</td><td> </td><td valign="top"><a href="#Some-Utility-Functions">Some Utility Functions</a></td></tr> <tr><td></td><td valign="top"><a href="#index-_002aoldest_002dforward_002dcompatible_002dasdf_002dversion_002a"><code>*oldest-forward-compatible-asdf-version*</code></a>:</td><td> </td><td valign="top"><a href="#Pitfalls-of-the-upgrade-to-ASDF-3">Pitfalls of the upgrade to ASDF 3</a></td></tr> <tr><td></td><td valign="top"><a href="#index-_002asource_002dregistry_002dparameter_002a"><code>*source-registry-parameter*</code></a>:</td><td> </td><td valign="top"><a href="#g_t_002asource_002dregistry_002dparameter_002a-variable">*source-registry-parameter* variable</a></td></tr> @@ -6361,7 +6446,7 @@ on the value of shell variables or the identity of the user. “system directory designators”. A <em>system directory designator</em> is a form which will be evaluated whenever a system is to be found, -and must evaluate to a directory to look in (or <code>NIL</code>). +and must evaluate to a directory to look in (or <code>nil</code>). By “directory”, we mean “designator for a pathname with a non-empty DIRECTORY component”. </p>
===================================== src/contrib/asdf/doc/asdf.info ===================================== --- a/src/contrib/asdf/doc/asdf.info +++ b/src/contrib/asdf/doc/asdf.info @@ -6,11 +6,11 @@ programs and libraries. You can find the latest version of this manual at https://common-lisp.net/project/asdf/asdf.html.
- ASDF Copyright (C) 2001-2015 Daniel Barlow and contributors. + ASDF Copyright (C) 2001-2016 Daniel Barlow and contributors.
- This manual Copyright (C) 2001-2015 Daniel Barlow and contributors. + This manual Copyright (C) 2001-2016 Daniel Barlow and contributors.
- This manual revised (C) 2009-2015 Robert P. Goldman and Francois-Rene + This manual revised (C) 2009-2016 Robert P. Goldman and Francois-Rene Rideau.
Permission is hereby granted, free of charge, to any person obtaining @@ -43,7 +43,7 @@ File: asdf.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) ASDF: Another System Definition Facility ****************************************
-Manual for Version 3.1.6.14 +Manual for Version 3.2.0
This manual describes ASDF, a system definition facility for Common Lisp programs and libraries. @@ -51,11 +51,11 @@ Lisp programs and libraries. You can find the latest version of this manual at https://common-lisp.net/project/asdf/asdf.html.
- ASDF Copyright (C) 2001-2015 Daniel Barlow and contributors. + ASDF Copyright (C) 2001-2016 Daniel Barlow and contributors.
- This manual Copyright (C) 2001-2015 Daniel Barlow and contributors. + This manual Copyright (C) 2001-2016 Daniel Barlow and contributors.
- This manual revised (C) 2009-2015 Robert P. Goldman and Francois-Rene + This manual revised (C) 2009-2016 Robert P. Goldman and Francois-Rene Rideau.
Permission is hereby granted, free of charge, to any person obtaining @@ -244,6 +244,7 @@ Issues with using and extending ASDF to define systems * How do I mark a source file to be loaded only and not compiled?:: * How do I work with readtables?:: * How can I capture ASDF's output?:: +* LOAD-PATHNAME has a weird value::
ASDF development FAQs
@@ -611,7 +612,9 @@ File: asdf.info, Node: Configuring ASDF to find your systems --- old style, Ne 4.2 Configuring ASDF to find your systems -- old style ======================================================
-The old way to configure ASDF to find your systems is by 'push'ing +Novices may skip this section. + + 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 @@ -625,7 +628,7 @@ used to put it in their '~/.sbclrc'.) takes precedence over the above source-registry.(1)
For example, let's say you want ASDF to find the '.asd' file -'/home/me/src/foo/foo.asd'. In your lisp initialization file, you could +'/home/me/src/foo/foo.asd'. In your Lisp initialization file, you could have the following:
(require "asdf") @@ -678,7 +681,7 @@ shell variables or the identity of the user. The variable 'asdf:*central-registry*' is thus a list of "system directory designators". A "system directory designator" is a form which will be evaluated whenever a system is to be found, and must evaluate to -a directory to look in (or 'NIL'). By "directory", we mean "designator +a directory to look in (or 'nil'). By "directory", we mean "designator for a pathname with a non-empty DIRECTORY component".
(3) On Windows, you can use Windows shortcuts instead of POSIX @@ -1195,6 +1198,7 @@ File: asdf.info, Node: The defsystem grammar, Next: Other code in .asd files, # which is used in :in-order-to dependency-def := simple-component-name | ( :feature FEATURE-EXPRESSION dependency-def ) + # (*note Feature dependencies: The defsystem grammar.) | ( :version simple-component-name version-specifier ) | ( :require module-name )
@@ -1213,8 +1217,6 @@ File: asdf.info, Node: The defsystem grammar, Next: Other code in .asd files, method-form := (operation-name qual lambda-list &rest body) qual := method qualifier?
- component-dep-fail-option := :fail | :try-next | :ignore - feature-expression := keyword | (:and FEATURE-EXPRESSION*) | (:or FEATURE-EXPRESSION*) @@ -1407,7 +1409,26 @@ than '#+_implementation-name_' to only depend on the specified module on the specific implementation that provides it. *Note if-feature-option::.
-6.3.10 Using logical pathnames +6.3.10 Feature dependencies +--------------------------- + +A feature dependency is of the form '(:feature FEATURE-EXPRESSION +DEPENDENCY)' If the FEATURE-EXPRESSION is satisfied by the running lisp +at the time the system definition is parsed, then the DEPENDENCY will be +added to the system's dependencies. If the FEATURE-EXPRESSION is _not_ +satisfied, then the feature dependency form is ignored. + + Note that this means that ':feature' *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 '(:feature :sbcl)' to require that a +system only be used on SBCL. + + Feature dependencies are not to be confused with the obsolete feature +requirement (*note feature requirement: The defsystem grammar.), or with +'if-feature'. + +6.3.11 Using logical pathnames ------------------------------
We do not generally recommend the use of logical pathnames, especially @@ -1453,7 +1474,7 @@ are shared with software written in different programming languages where conventions include the use of underscores, dots or CamelCase in pathnames.
-6.3.11 Serial dependencies +6.3.12 Serial dependencies --------------------------
If the ':serial t' option is specified for a module, ASDF will add @@ -1469,7 +1490,7 @@ preceding it. This is done as if by ':depends-on'. (:file "b" :depends-on ("a")) (:file "c" :depends-on ("a" "b")))
-6.3.12 Source location (':pathname') +6.3.13 Source location (':pathname') ------------------------------------
The ':pathname' option is optional in all cases for systems defined via @@ -1508,7 +1529,7 @@ pathname will be set to: that a developer can evaluate a 'defsystem' form from within an editor without clobbering its source location)
-6.3.13 if-feature option +6.3.14 if-feature option ------------------------
This option allows you to specify a feature expression to be evaluated @@ -1531,13 +1552,6 @@ before any build operations have been performed. This option was added in ASDF 3. For more information, *Note Required features: required-features.
-6.3.14 if-component-dep-fails option ------------------------------------- - -This option was removed in ASDF 3. Its semantics was limited in purpose -and dubious to explain, and its implementation was breaking a hole into -the ASDF object model. Please use the 'if-feature' option instead. - 6.3.15 feature requirement --------------------------
@@ -1677,11 +1691,12 @@ File: asdf.info, Node: The object model of ASDF, Next: Controlling where ASDF
ASDF is designed in an object-oriented way from the ground up. Both a system's structure and the operations that can be performed on systems -follow a extensible protocol, allowing programmers to add new behaviours -to ASDF. For example, 'cffi' adds support for special FFI description -files that interface with C libraries and for wrapper files that embed C -code in Lisp. 'asdf-jar' supports creating Java JAR archives in ABCL. -'poiu' supports compiling code in parallel using background processes. +follow an extensible protocol, allowing programmers to add new +behaviours to ASDF. For example, 'cffi' adds support for special FFI +description files that interface with C libraries and for wrapper files +that embed C code in Lisp. 'asdf-jar' supports creating Java JAR +archives in ABCL. 'poiu' supports compiling code in parallel using +background processes.
The key classes in ASDF are 'component' and 'operation'. A 'component' represents an individual source file or a group of source @@ -1769,18 +1784,20 @@ in turn below. 'operate' invokes OPERATION on SYSTEM. 'oos' is a synonym for 'operate' (it stands for operate-on-system).
- OPERATION is a symbol that is passed, along with the supplied - INITARGS, to 'make-operation' (which will call 'make-instance') to - create the operation object. COMPONENT is a component designator, - usually a string or symbol that designates a system, sometimes a - list of strings or symbols that designate a subcomponent of a - system. - - The INITARGS are passed to the 'make-instance' call when creating - the operation object. Note that dependencies may cause the - operation to invoke other operations on the system or its - components: the new operations will be created with the same - INITARGS as the original one. + OPERATION is an operation designator: it can be an operation object + itself, or, typically, a symbol that is passed to 'make-operation' + (which will call 'make-instance'), to create the operation object. + COMPONENT is a component designator: it can be a component object + itself, or, typically, a string or symbol (to be + 'string-downcase'd) that names a system, more rarely a list of + strings or symbols that designate a subcomponent of a system. + + The ability to pass INITARGS to 'make-operation' is now deprecated, + and will be removed. For more details, *note make-operation::. + Note that dependencies may cause the operation to invoke other + operations on the system or its components: the new operations may + or may not be created with the same INITARGS as the original one + (for the moment).
If FORCE is ':all', then all systems are forced to be recompiled even if not modified since last compilation. If FORCE is 't', then @@ -1807,6 +1824,18 @@ in turn below. To see what 'operate' would do, you can use: (asdf:traverse operation-class system-name)
+ -- Function: 'make-operation' OPERATION-CLASS &rest INITARGS + + The INITARGS are passed to 'make-instance' call when creating the + operation object. + + *Note:*INITARGS for 'operation's are now deprecated, and will be + removed from ASDF in the near future. + + *Note:* 'operation' instances must *never* be created using + 'make-instance' directly: only through 'make-operation'. Attempts + to directly make 'operation' instances will cause a run-time error. + File: asdf.info, Node: Predefined operations of ASDF, Next: Creating new operations, Prev: Operations, Up: Operations
@@ -2237,8 +2266,8 @@ component itself, or a string or symbol, or a list of designators. '/current/path/to/foo.asd', but system 'foo' was previously loaded from '/previous/path/to/foo.asd' then LOCATE-SYSTEM will return the following values: - 1. FOUNDP will be 'T', - 2. FOUND-SYSTEM will be 'NIL', + 1. FOUNDP will be 't', + 2. FOUND-SYSTEM will be 'nil', 3. PATHNAME will be '#p"/current/path/to/foo.asd"', 4. PREVIOUS will be an object of type 'SYSTEM' with 'system-source-file' slot value of @@ -3637,23 +3666,29 @@ File: asdf.info, Node: Output Shell-friendly syntax for configuration, Next: S 9.5 Shell-friendly syntax for configuration ===========================================
-When considering environment variable 'ASDF_OUTPUT_TRANSLATIONS' ASDF -will skip to the next configuration if it's an empty string. It will -'READ' the string as an SEXP in the DSL if it begins with a paren '(' -and it will be interpreted as a list of directories. Directories should -come by pairs, indicating a mapping directive. Entries are separated by -a ':' (colon) on Unix platforms (including cygwin), by a ';' (semicolon) -on other platforms (mainly, Windows). +When processing the environment variable 'ASDF_OUTPUT_TRANSLATIONS': + * ASDF will skip to the next configuration if it's an empty string. + * ASDF will 'READ' the string as an SEXP in the DSL, if it begins + with a parenthesis '('. + * Otherwise ASDF will interpret the value as a list of directories + (see below). + + In the directory list format, directories should come in pairs, each +pair indicating a mapping directive. Entries are separated by a ':' +(colon) on Unix platforms (including Mac and cygwin), and by a ';' +(semicolon) on other platforms (mainly, Windows).
The magic empty entry, if it comes in what would otherwise be the first entry in a pair, indicates the splicing of inherited -configuration. If it comes as the second entry in a pair, it indicates -that the directory specified first is to be left untranslated (which has -the same effect as if the directory had been repeated). Thus -'"/foo:/bar::/baz:"' means that things under directory '/foo/' are -translated to be under '/bar/', then include the inherited -configuration, then specify that things under directory '/baz/' are not -translated. +configuration; the next entry (if any) then starts a new pair. If the +second entry in a pair is empty, it indicates that the directory in the +first entry is to be left untranslated (which has the same effect as if +the directory had been repeated). + + For example, '"/foo:/bar::/baz:"' means: specify that outputs for +things under directory '/foo/' are translated to be under '/bar/'; then +include the inherited configuration; then specify that outputs for +things under directory '/baz/' are not translated.
File: asdf.info, Node: Semantics of Output Translations, Next: Output Caching Results, Prev: Output Shell-friendly syntax for configuration, Up: Controlling where ASDF saves compiled files @@ -3909,8 +3944,8 @@ implementations that support Unicode, and you can use reader-conditionalization to protect any ':encoding _encoding_' statement, as in '#+asdf-unicode :encoding #+asdf-unicode :utf-8'. We recommend that you avoid using unprotected ':encoding' specifications -until after ASDF 2.21 or later becomes widespread. As of May 2015, all -maintained implementations provide ASDF 3, so you may prudently start +until after ASDF 2.21 or later becomes widespread. As of May 2016, all +maintained implementations provide ASDF 3.1, so you may prudently start using this and other features without such protection.
While it offers plenty of hooks for extension, and one such extension @@ -4038,13 +4073,20 @@ These functions are exported by ASDF for your convenience. inspiration (or disinspiration) from what it does in 'header.lisp' and 'upgrade.lisp'.
- -- Function: register-preloaded-system name &rest keys + -- Function: register-preloaded-system name &rest keys &key version + &allow-other-keys A system with name NAME, created by 'make-instance' with extra keys - KEYS (e.g. ':version'), is registered as _preloaded_. That is, - its code has already been loaded into the current image, and if at - some point some other system ':depends-on' it yet no source code is - found, it is considered as already provided, and ASDF will not - raise a 'missing-component' error. + KEYS (e.g. ':version'), is registered as _preloaded_. If VERSION + is 't' (default), then the version is copied from the defined + system of the same name (if registered) or else is 'nil' (this + automatic copy of version is only available starting since ASDF + 3.1.8). + + A preloaded system is considered as having already been loaded into + the current image, and if at some point some other system + ':depends-on' it yet no source code is found, it is considered as + already provided, and ASDF will not raise a 'missing-component' + error.
This function is particularly useful if you distribute your code as fasls with either 'compile-bundle-op' or @@ -4052,17 +4094,27 @@ These functions are exported by ASDF for your convenience. that dependencies will work uniformly whether you're using your software from source or from fasl.
+ Note that if the system was already defined or loaded from source + code, its build information will remain active until you call + 'clear-system' on it, at which point a system without build + information will be registered in its place. + -- Function: register-immutable-system name &rest keys - A system with name NAME, created by 'make-instance' with extra keys - KEYS (e.g. ':version'), is registered as _immutable_. That is, - its code has already been loaded into the current image, and if at - some point some other system ':depends-on' it, it is considered as - already provided, and no attempt will be made to search for an - updated version from the source-registry or any other method. - There will be no search for an '.asd' file, and no - 'missing-component' error. - - This function (available since ASDF 3.1.5) is particularly useful + A system with name NAME is registered as preloaded, and + additionally is marked as _immutable_: that is, attempts to compile + or load it will be succeed without actually reading, creating or + loading any file, as if the system was passed as a 'force-not' + argument to all calls to 'plan' or 'operate'. There will be no + search for an updated '.asd' file to override the loaded version, + whether from the source-register or any other method. + + If a VERSION keyword argument is specified as 't' or left + unspecified, then the version is copied from the defined system of + the same name (if registered) or else is 'nil'. This automatic + copy of version is available starting since immutable systems have + been available in ASDF 3.1.5. + + This function, available since ASDF 3.1.5, is particularly useful if you distribute a large body of code as a precompiled image, and want to allow users to extend the image with further extension systems, but without making thousands of filesystem requests @@ -4104,9 +4156,10 @@ File: asdf.info, Node: Some Utility Functions, Prev: Miscellaneous Functions,
The below functions are not exported by ASDF itself, but by UIOP, available since ASDF 3. Some of them have precursors in ASDF 2, but we -recommend you rely on ASDF 3 for active developments. UIOP provides -many, many more utility functions, and we recommend you read its README -and sources for more information. +recommend that for active developments, you should rely on the package +UIOP as included in ASDF 3. UIOP provides many, many more utility +functions, and we recommend you read its 'README.md' and sources for +more information.
-- Function: parse-unix-namestring name &key type defaults dot-dot ensure-directory &allow-other-keys @@ -4293,7 +4346,7 @@ and sources for more information. documentation for 'uiop:access-at'.
* If the object is ':forms', the content is captured as a list - of S-expressions, as read by the Lisp reader. If the COUNT + of s-expressions, as read by the Lisp reader. If the COUNT argument is provided, it is a maximum count of lines to be read. We recommend you control the syntax with such macro as 'uiop:with-safe-io-syntax'. @@ -4812,8 +4865,8 @@ when upgrading from ASDF 2, due to limitations in ASDF 2. 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 or later (since May - 2015), the simple solution is just to use code as below in your + * 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::): (require "asdf") @@ -4852,15 +4905,14 @@ File: asdf.info, Node: What happened to the bundle operations, Prev: Pitfalls
'asdf-ecl' and its short-lived successor 'asdf-bundle' are no more, having been replaced by code now built into ASDF 3. Moreover, the name -of the bundle operations has changed since ASDF 3.1.3. - - And yet, the feature is not enabled to be used by 'load-system' by -default on ECL as originally intended, because of a bug in ECL itself -found during testing. +of the bundle operations has changed since ASDF 3.1.3. Starting with +ASDF 3.2.0, 'load-system' will once again use 'load-bundle-op' instead +of 'load-op' on ECL, as originally intended by 'asdf-ecl' authors, but +disabled for a long time due to bugs in both ECL and ASDF.
- Some of the bundle operations were renamed after ASDF 3.1.3, and the -old names have been removed. Old bundle operations, and their modern -equivalents are: + Note that some of the bundle operations were renamed after ASDF +3.1.3, and the old names have been removed. Old bundle operations, and +their modern equivalents are:
* 'fasl-op' is now 'compile-bundle-op' * 'load-fasl-op' is now 'load-bundle-op' @@ -5044,6 +5096,7 @@ File: asdf.info, Node: Issues with using and extending ASDF to define systems, * How do I mark a source file to be loaded only and not compiled?:: * How do I work with readtables?:: * How can I capture ASDF's output?:: +* LOAD-PATHNAME has a weird value::
File: asdf.info, Node: How can I cater for unit-testing in my system?, Next: How can I cater for documentation generation in my system?, Prev: Issues with using and extending ASDF to define systems, Up: Issues with using and extending ASDF to define systems @@ -5277,7 +5330,7 @@ Use from the 'named-readtables' system the macro 'named-readtables:defreadtable'.
-File: asdf.info, Node: How can I capture ASDF's output?, Prev: How do I work with readtables?, Up: Issues with using and extending ASDF to define systems +File: asdf.info, Node: How can I capture ASDF's output?, Next: LOAD-PATHNAME has a weird value, Prev: How do I work with readtables?, Up: Issues with using and extending ASDF to define systems
13.6.8 How can I capture ASDF's output? --------------------------------------- @@ -5287,6 +5340,32 @@ Output from ASDF and ASDF extensions are sent to the CL stream 'asdf:operate' should redirect all output from ASDF operations.
+File: asdf.info, Node: LOAD-PATHNAME has a weird value, Prev: How can I capture ASDF's output?, Up: Issues with using and extending ASDF to define systems + +13.6.9 *LOAD-PATHNAME* and *LOAD-TRUENAME* have weird values, help! +------------------------------------------------------------------- + +Conventional Common Lisp code may use '*LOAD-TRUENAME*' or +'*LOAD-PATHNAME*' to find files adjacent to source files. This will +generally _not_ work in ASDF-loaded systems. Recall that ASDF relocates +the FASL files it builds, typically to a special cache directory. Thus +the value of '*LOAD-PATHNAME*' and '*LOAD-TRUENAME*' at load time, when +ASDF is loading your system, will typically be a pathname in that cache +directory, and useless to you for finding other system components. + + There are two ways to work around this problem: + 1. Use the 'system-relative-pathname' function. This can readily be + used from outside the system, but it is probably not good software + engineering to require a source file _of_ a system to know what + system it is going to be part of. Contained objects should not + have to know their containers. + 2. Store the pathname at compile time, so that you get the pathname of + the source file, which is presumably what you want. To do this, + you can capture the value of '(or *compile-file-pathname* + *load-truename*)' (or '*LOAD-PATHNAME*', if you prefer) in a macro + expansion or other compile-time evaluated context. + + File: asdf.info, Node: ASDF development FAQs, Prev: Issues with using and extending ASDF to define systems, Up: FAQ
13.7 ASDF development FAQs @@ -5371,7 +5450,7 @@ Bibliography http://blog.quicklisp.org/ http://xach.livejournal.com/ * Francois-Rene Rideau and Robert Goldman: "Evolving ASDF: More Cooperation, Less Coordination", 2010. This article describes the - main issues solved by ASDF 2. + main issues solved by ASDF 2, and exposes its design principles. https://common-lisp.net/project/asdf/doc/ilc2010draft.pdf https://gitlab.common-lisp.org/asdf/ilc2010 * Francois-Rene Rideau and Spencer Brody: "XCVB: an eXtensible @@ -5426,34 +5505,34 @@ Concept Index * :asdf2: Introduction. (line 6) * :asdf3: Introduction. (line 6) * :build-operation: The defsystem grammar. - (line 129) + (line 128) * :compile-check: Controlling file compilation. (line 6) * :default-registry source config directive: Configuration DSL. (line 6) * :defsystem-depends-on: The defsystem grammar. - (line 121) + (line 120) * :directory source config directive: Configuration DSL. (line 6) * :exclude source config directive: Configuration DSL. (line 6) -* :if-component-dep-fails component option: The defsystem grammar. - (line 395) +* :feature dependencies: The defsystem grammar. + (line 270) * :if-feature component option: The defsystem grammar. - (line 372) + (line 390) * :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 261) + (line 260) * :tree source config directive: Configuration DSL. (line 6) * :version: The defsystem form. (line 68) * :version <1>: The defsystem grammar. - (line 230) + (line 229) * :version <2>: Common attributes of components. (line 23) * :weakly-depends-on: The defsystem grammar. - (line 141) + (line 140) * also-exclude source config directive: Configuration DSL. (line 6) * around-compile keyword: Controlling file compilation. (line 6) @@ -5485,32 +5564,32 @@ Concept Index * exclude source config directive: Configuration DSL. (line 6) * ignore-invalid-entries source config directive: Configuration DSL. (line 6) -* immutable systems: Operations. (line 65) +* immutable systems: Operations. (line 67) * immutable systems <1>: Miscellaneous Functions. - (line 91) + (line 108) * include source config directive: Configuration DSL. (line 6) * inherit-configuration source config directive: Configuration DSL. (line 6) * launchpad: Where do I report a bug?. (line 6) * logical pathnames: The defsystem grammar. - (line 271) + (line 289) * mailing list: Mailing list. (line 6) * operation: Operations. (line 6) * pathname specifiers: The defsystem grammar. - (line 163) + (line 162) * Primary system name: Components. (line 70) * readtables: How do I work with readtables?. (line 6) * serial dependencies: The defsystem grammar. - (line 317) + (line 335) * 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 230) + (line 229)
File: asdf.info, Node: Function and Class Index, Next: Variable Index, Prev: Concept Index, Up: Top @@ -5599,8 +5678,9 @@ Function and Class Index * locate-system: Components. (line 97) * make: Convenience Functions. (line 54) +* make-operation: Operations. (line 78) * merge-pathnames*: Some Utility Functions. - (line 62) + (line 63) * module: Pre-defined subclasses of component. (line 23) * monolithic-binary-op (obsolete): What happened to the bundle operations. @@ -5629,34 +5709,34 @@ Function and Class Index * output-files: Creating new operations. (line 33) * parse-unix-namestring: Some Utility Functions. - (line 12) + (line 13) * perform: Creating new operations. (line 19) * prepare-op: Predefined operations of ASDF. (line 38) * primary-system-name: Components. (line 70) * primary-system-name <1>: Components. (line 91) -* register-immutable-system: Operations. (line 65) +* register-immutable-system: Operations. (line 67) * register-immutable-system <1>: Miscellaneous Functions. - (line 75) + (line 87) * register-preloaded-system: Miscellaneous Functions. (line 61) * require-system: Convenience Functions. (line 65) * run-program: Some Utility Functions. - (line 89) + (line 90) * run-shell-command: Miscellaneous Functions. - (line 93) + (line 110) * slurp-input-stream: Some Utility Functions. - (line 161) + (line 162) * source-file: Pre-defined subclasses of component. (line 6) * source-file-type: Pitfalls of the transition to ASDF 2. (line 77) * subpathname: Some Utility Functions. - (line 71) + (line 72) * subpathname*: Some Utility Functions. - (line 84) + (line 85) * system: Pre-defined subclasses of component. (line 51) * SYSTEM-DEFINITION-ERROR: Error handling. (line 6) @@ -5666,6 +5746,8 @@ Function and Class Index (line 12) * system-relative-pathname: Miscellaneous Functions. (line 8) +* system-relative-pathname <1>: LOAD-PATHNAME has a weird value. + (line 15) * system-source-directory: Miscellaneous Functions. (line 25) * system-weakly-depends-on: Information about system dependencies. @@ -5674,7 +5756,7 @@ Function and Class Index (line 52) * test-system: Convenience Functions. (line 49) -* traverse: Operations. (line 73) +* traverse: Operations. (line 75) * version-satisfies: Common attributes of components. (line 23) * version-satisfies <1>: Functions. (line 6) @@ -5694,10 +5776,14 @@ Variable Index * *features*: Introduction. (line 6) * *image-dump-hook*: Resetting the ASDF configuration. (line 14) +* *LOAD-PATHNAME*: LOAD-PATHNAME has a weird value. + (line 6) * *load-system-operation*: Convenience Functions. (line 29) +* *LOAD-TRUENAME*: LOAD-PATHNAME has a weird value. + (line 6) * *nil-pathname*: Some Utility Functions. - (line 43) + (line 44) * *oldest-forward-compatible-asdf-version*: Pitfalls of the upgrade to ASDF 3. (line 83) * *source-registry-parameter*: *source-registry-parameter* variable. @@ -5714,137 +5800,139 @@ Variable Index Tag Table: Node: Top1684 -Node: Introduction7673 -Node: Quick start summary9976 -Node: Loading ASDF11683 -Node: Loading a pre-installed ASDF11985 -Ref: Loading a pre-installed ASDF-Footnote-113798 -Node: Checking whether ASDF is loaded13980 -Node: Upgrading ASDF14894 -Node: Replacing your implementation's ASDF15882 -Node: Loading ASDF from source17305 -Node: Configuring ASDF18406 -Node: Configuring ASDF to find your systems19179 -Ref: Configuring ASDF to find your systems-Footnote-122484 -Ref: Configuring ASDF to find your systems-Footnote-222731 -Ref: Configuring ASDF to find your systems-Footnote-323013 -Node: Configuring ASDF to find your systems --- old style23474 -Ref: Configuring ASDF to find your systems --- old style-Footnote-125901 -Ref: Configuring ASDF to find your systems --- old style-Footnote-226133 -Ref: Configuring ASDF to find your systems --- old style-Footnote-326900 -Node: Configuring where ASDF stores object files27056 -Node: Resetting the ASDF configuration28459 -Node: Using ASDF29516 -Node: Loading a system29727 -Node: Convenience Functions30744 -Ref: Convenience Functions-Footnote-136104 -Node: Moving on36182 -Node: Defining systems with defsystem36553 -Node: The defsystem form36981 -Node: A more involved example40387 -Ref: A more involved example-Footnote-147369 -Node: The defsystem grammar48051 -Ref: if-feature-option64666 -Node: Other code in .asd files66498 -Node: The package-inferred-system extension67634 -Node: The object model of ASDF71901 -Ref: The object model of ASDF-Footnote-174231 -Ref: The object model of ASDF-Footnote-274583 -Node: Operations74910 -Ref: operate76015 -Node: Predefined operations of ASDF78498 -Ref: test-op80612 -Node: Creating new operations88501 -Node: Components93714 -Ref: System names97198 -Ref: Components-Footnote-1101870 -Ref: Components-Footnote-2102166 -Node: Common attributes of components102488 -Ref: required-features104050 -Node: Pre-defined subclasses of component109897 -Node: Creating new component types112331 -Node: Dependencies113621 -Node: Functions115492 -Node: Controlling where ASDF searches for systems117326 -Node: Configurations117948 -Node: Truenames and other dangers121423 -Node: XDG base directory122709 -Node: Backward Compatibility124123 -Node: Configuration DSL124839 -Node: Configuration Directories130394 -Node: The here directive132221 -Node: Shell-friendly syntax for configuration134114 -Node: Search Algorithm135131 -Node: Caching Results136632 -Node: Configuration API139876 -Node: Introspection141915 -Node: *source-registry-parameter* variable142179 -Node: Information about system dependencies142748 -Node: Status143664 -Node: Rejected ideas144119 -Node: TODO146500 -Node: Credits for the source-registry146685 -Node: Controlling where ASDF saves compiled files147220 -Ref: Controlling where ASDF saves compiled files-Footnote-1148632 -Node: Output Configurations148676 -Ref: Output Configurations-Footnote-1151537 -Node: Output Backward Compatibility151603 -Node: Output Configuration DSL154329 -Node: Output Configuration Directories159784 -Node: Output Shell-friendly syntax for configuration161341 -Node: Semantics of Output Translations162650 -Node: Output Caching Results164219 -Node: Output location API164699 -Node: Credits for output translations167121 -Node: Error handling167641 -Node: Miscellaneous additional functionality168482 -Node: Controlling file compilation168954 -Node: Controlling source file character encoding172220 -Node: Miscellaneous Functions179035 -Ref: system-relative-pathname179332 -Ref: Miscellaneous Functions-Footnote-1184956 -Node: Some Utility Functions185067 -Node: Getting the latest version195795 -Node: FAQ196740 -Node: Where do I report a bug?197135 -Node: Mailing list197500 -Node: What has changed between ASDF 1 ASDF 2 and ASDF 3?197835 -Node: What are ASDF 1 2 3?200009 -Node: How do I detect the ASDF version?201050 -Node: ASDF can portably name files in subdirectories203357 -Node: Output translations204907 -Node: Source Registry Configuration205934 -Node: Usual operations are made easier to the user207561 -Node: Many bugs have been fixed208147 -Node: ASDF itself is versioned209979 -Node: ASDF can be upgraded210854 -Node: Decoupled release cycle212006 -Node: Pitfalls of the transition to ASDF 2212935 -Node: Pitfalls of the upgrade to ASDF 3217205 -Ref: Pitfalls of the upgrade to ASDF 3-Footnote-1221572 -Node: What happened to the bundle operations221742 -Node: Issues with installing the proper version of ASDF222844 -Node: My Common Lisp implementation comes with an outdated version of ASDF. What to do?223315 -Node: I'm a Common Lisp implementation vendor. When and how should I upgrade ASDF?224248 -Node: Issues with configuring ASDF228131 -Node: How can I customize where fasl files are stored?228506 -Node: How can I wholly disable the compiler output cache?229599 -Node: Issues with using and extending ASDF to define systems230978 -Node: How can I cater for unit-testing in my system?231739 -Node: How can I cater for documentation generation in my system?232627 -Node: How can I maintain non-Lisp (e.g. C) source files?233148 -Ref: report-bugs233580 -Node: I want to put my module's files at the top level. How do I do this?233580 -Node: How do I create a system definition where all the source files have a .cl extension?236730 -Node: How do I mark a source file to be loaded only and not compiled?238703 -Node: How do I work with readtables?239699 -Node: How can I capture ASDF's output?243426 -Node: ASDF development FAQs243857 -Node: How do I run the tests interactively in a REPL?244096 -Node: Ongoing Work245962 -Node: Bibliography246241 -Node: Concept Index249677 -Node: Function and Class Index256539 -Node: Variable Index268093 +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 Results137969 +Node: Configuration API141213 +Node: Introspection143252 +Node: *source-registry-parameter* variable143516 +Node: Information about system dependencies144085 +Node: Status145001 +Node: Rejected ideas145456 +Node: TODO147837 +Node: Credits for the source-registry148022 +Node: Controlling where ASDF saves compiled files148557 +Ref: Controlling where ASDF saves compiled files-Footnote-1149969 +Node: Output Configurations150013 +Ref: Output Configurations-Footnote-1152874 +Node: Output Backward Compatibility152940 +Node: Output Configuration DSL155666 +Node: Output Configuration Directories161121 +Node: Output Shell-friendly syntax for configuration162678 +Node: Semantics of Output Translations164197 +Node: Output Caching Results165766 +Node: Output location API166246 +Node: Credits for output translations168668 +Node: Error handling169188 +Node: Miscellaneous additional functionality170029 +Node: Controlling file compilation170501 +Node: Controlling source file character encoding173767 +Node: Miscellaneous Functions180584 +Ref: system-relative-pathname180881 +Ref: Miscellaneous Functions-Footnote-1187328 +Node: Some Utility Functions187439 +Node: Getting the latest version198217 +Node: FAQ199162 +Node: Where do I report a bug?199557 +Node: Mailing list199922 +Node: What has changed between ASDF 1 ASDF 2 and ASDF 3?200257 +Node: What are ASDF 1 2 3?202431 +Node: How do I detect the ASDF version?203472 +Node: ASDF can portably name files in subdirectories205779 +Node: Output translations207329 +Node: Source Registry Configuration208356 +Node: Usual operations are made easier to the user209983 +Node: Many bugs have been fixed210569 +Node: ASDF itself is versioned212401 +Node: ASDF can be upgraded213276 +Node: Decoupled release cycle214428 +Node: Pitfalls of the transition to ASDF 2215357 +Node: Pitfalls of the upgrade to ASDF 3219627 +Ref: Pitfalls of the upgrade to ASDF 3-Footnote-1223996 +Node: What happened to the bundle operations224166 +Node: Issues with installing the proper version of ASDF225331 +Node: My Common Lisp implementation comes with an outdated version of ASDF. What to do?225802 +Node: I'm a Common Lisp implementation vendor. When and how should I upgrade ASDF?226735 +Node: Issues with configuring ASDF230618 +Node: How can I customize where fasl files are stored?230993 +Node: How can I wholly disable the compiler output cache?232086 +Node: Issues with using and extending ASDF to define systems233465 +Node: How can I cater for unit-testing in my system?234262 +Node: How can I cater for documentation generation in my system?235150 +Node: How can I maintain non-Lisp (e.g. C) source files?235671 +Ref: report-bugs236103 +Node: I want to put my module's files at the top level. How do I do this?236103 +Node: How do I create a system definition where all the source files have a .cl extension?239253 +Node: How do I mark a source file to be loaded only and not compiled?241226 +Node: How do I work with readtables?242222 +Node: How can I capture ASDF's output?245949 +Node: LOAD-PATHNAME has a weird value246420 +Node: ASDF development FAQs247906 +Node: How do I run the tests interactively in a REPL?248145 +Node: Ongoing Work250011 +Node: Bibliography250290 +Node: Concept Index253761 +Node: Function and Class Index260620 +Node: Variable Index272394 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
===================================== src/general-info/release-21c.txt ===================================== --- a/src/general-info/release-21c.txt +++ b/src/general-info/release-21c.txt @@ -22,6 +22,7 @@ New in this release: * Feature enhancements
* Changes + * ASDF 3.2.0
* ANSI compliance fixes:
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/commit/005cf1790526bc501c40c7e170...