diff --git a/asdf.asd b/asdf.asd index 71560b41f26fc0abfa53d00cfc16863ba6996cbb..4c6845f9fefa39de2e0ca964874cc6b67add0681 100644 --- a/asdf.asd +++ b/asdf.asd @@ -12,7 +12,7 @@ :licence "MIT" :description "Another System Definition Facility" :long-description "ASDF builds Common Lisp software organized into defined systems." - :version "2.015.7" ;; to be automatically updated by bin/bump-revision + :version "2.015.8" ;; to be automatically updated by bin/bump-revision :depends-on () :components ((:file "asdf") diff --git a/asdf.lisp b/asdf.lisp index 0f738cce9e8c586c2c98124f8408c5f492661fc4..88efd85829d72c0eb3c2d5ea541e533997c757e9 100755 --- a/asdf.lisp +++ b/asdf.lisp @@ -1,5 +1,5 @@ ;;; -*- mode: common-lisp; Base: 10 ; Syntax: ANSI-Common-Lisp -*- -;;; This is ASDF 2.015.7: Another System Definition Facility. +;;; This is ASDF 2.015.8: Another System Definition Facility. ;;; ;;; Feedback, bug reports, and patches are all welcome: ;;; please mail to <asdf-devel@common-lisp.net>. @@ -106,7 +106,7 @@ ;; "2.345.6" would be a development version in the official upstream ;; "2.345.0.7" would be your seventh local modification of official release 2.345 ;; "2.345.6.7" would be your seventh local modification of development version 2.345.6 - (asdf-version "2.015.7") + (asdf-version "2.015.8") (existing-asdf (fboundp 'find-system)) (existing-version *asdf-version*) (already-there (equal asdf-version existing-version))) @@ -2847,7 +2847,7 @@ located." :clisp :cmu :ecl :gcl :sbcl :scl :symbolics :xcl)) (defparameter *os-features* - '((:win :windows :mswindows :win32 :mingw32) ;; shorten things on windows + '(:cygwin (:win :windows :mswindows :win32 :mingw32) ;; shorten things on windows (:solaris :sunos) (:linux :linux-target) ;; for GCL at least, must appear before :bsd. (:macosx :darwin :darwin-target :apple) @@ -2856,7 +2856,7 @@ located." :genera)) (defparameter *architecture-features* - '((:amd64 :x86-64 :x86_64 :x8664-target) + '((:x64 :amd64 :x86-64 :x86_64 :x8664-target) (:x86 :i386 :i486 :i586 :i686 :pentium3 :pentium4 :pc386 :iapx386 :x8632-target) :hppa64 :hppa (:ppc64 :ppc64-target) (:ppc32 :ppc32-target :ppc :powerpc) @@ -2869,40 +2869,35 @@ located." (defun* lisp-version-string () (let ((s (lisp-implementation-version))) - (declare (ignorable s)) - #+allegro (format nil - "~A~A~A~A" - excl::*common-lisp-version-number* - ;; ANSI vs MoDeRn - thanks to Robert Goldman and Charley Cox - (if (eq excl:*current-case-mode* - :case-sensitive-lower) "M" "A") - ;; Note if not using International ACL - ;; see http://www.franz.com/support/documentation/8.1/doc/operators/excl/ics-target-case.htm - (excl:ics-target-case - (:-ics "8") - (:+ics "")) - (if (member :64bit *features*) "-64bit" "")) - #+armedbear (format nil "~a-fasl~a" s system::*fasl-version*) - #+clisp (subseq s 0 (position #\space s)) ; strip build information (date, etc.) - #+clozure (format nil "~d.~d-f~d" ; shorten for windows - ccl::*openmcl-major-version* - ccl::*openmcl-minor-version* - (logand ccl::fasl-version #xFF)) - #+cmu (substitute #\- #\/ s) - #+ecl (format nil "~A~@[-~A~]" s - (let ((vcs-id (ext:lisp-implementation-vcs-id))) - (when (>= (length vcs-id) 8) - (subseq vcs-id 0 8)))) - #+gcl (subseq s (1+ (position #\space s))) - #+genera (multiple-value-bind (major minor) (sct:get-system-version "System") - (format nil "~D.~D" major minor)) - #+lispworks (format nil "~A~@[~A~]" s - (when (member :lispworks-64bit *features*) "-64bit")) - ;; #+sbcl (format nil "~a-fasl~d" s sb-fasl:+fasl-file-version+) ; f-f-v redundant w/ version - #+mcl (subseq s 8) ; strip the leading "Version " - #+(or cormanlisp sbcl scl) s - #-(or allegro armedbear clisp clozure cmu cormanlisp - ecl gcl genera lispworks mcl sbcl scl) s)) + (or + #+allegro (format nil + "~A~A~A" + excl::*common-lisp-version-number* + ;; ANSI vs MoDeRn - thanks to Robert Goldman and Charley Cox + (if (eq excl:*current-case-mode* + :case-sensitive-lower) "M" "A") + ;; Note if not using International ACL + ;; see http://www.franz.com/support/documentation/8.1/doc/operators/excl/ics-target-case.htm + (excl:ics-target-case + (:-ics "8") + (:+ics ""))) ; redundant? (if (member :64bit *features*) "-64bit" "")) + #+armedbear (format nil "~a-fasl~a" s system::*fasl-version*) + #+clisp (subseq s 0 (position #\space s)) ; strip build information (date, etc.) + #+clozure (format nil "~d.~d-f~d" ; shorten for windows + ccl::*openmcl-major-version* + ccl::*openmcl-minor-version* + (logand ccl::fasl-version #xFF)) + #+cmu (substitute #\- #\/ s) + #+ecl (format nil "~A~@[-~A~]" s + (let ((vcs-id (ext:lisp-implementation-vcs-id))) + (when (>= (length vcs-id) 8) + (subseq vcs-id 0 8)))) + #+gcl (subseq s (1+ (position #\space s))) + #+genera (multiple-value-bind (major minor) (sct:get-system-version "System") + (format nil "~D.~D" major minor)) + ;; #+lispworks (format nil "~A~@[~A~]" s (when (member :lispworks-64bit *features*) "-64bit") #+mcl (subseq s 8) ; strip the leading "Version " + ;; #+sbcl (format nil "~a-fasl~d" s sb-fasl:+fasl-file-version+) ; f-f-v redundant w/ version + s))) (defun* first-feature (features) (labels @@ -2996,7 +2991,7 @@ located." ,(flet ((try (x sub) (try-directory-subpath x sub))) ;; read-windows-registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common AppData (try (or #+lispworks (sys:get-folder-path :common-appdata) - (getenv "COMMONAPPDATA") + (getenv "ALLUSERSAPPDATA") (try (getenv "ALLUSERSPROFILE") "Application Data/")) "common-lisp/config/")) #+asdf-unix #p"/etc/common-lisp/"))) @@ -3889,7 +3884,7 @@ with a different configuration, so the configuration would be re-read then." ,(or #+lispworks (sys:get-folder-path :appdata) (getenv "APPDATA")) ,(or #+lispworks (sys:get-folder-path :common-appdata) - (getenv "COMMONAPPDATA") + (getenv "ALLUSERSAPPDATA") (try (getenv "ALLUSERSPROFILE") "Application Data/")))) :collect `(:directory ,(try dir "common-lisp/systems/")) :collect `(:tree ,(try dir "common-lisp/source/"))) diff --git a/doc/asdf.texinfo b/doc/asdf.texinfo index 0724b7341f0da74aea594d0fe0428d59ca1248a5..b8f703cbbb63916ad95bf130d843b20d1b1fa623 100644 --- a/doc/asdf.texinfo +++ b/doc/asdf.texinfo @@ -172,14 +172,23 @@ the ASDF internals and how to extend ASDF. @emph{Nota Bene}: We have released ASDF 2.000 on May 31st 2010. Subsequent releases of ASDF 2 have since then been included -in all actively maintained CL implementations that bundle ASDF, -and made to work with all actively used CL implementations and a few more. +in all actively maintained CL implementations that used to bundle ASDF 1, +plus some implementations that didn't use to, +and has been made to work with all actively used CL implementations and a few more. @xref{FAQ,,``What has changed between ASDF 1 and ASDF 2?''}. Furthermore, it is possible to upgrade from ASDF 1 to ASDF 2 on the fly. For this reason, we have stopped supporting ASDF 1; if you are using ASDF 1 and are experiencing any kind of issues or limitations, we recommend you upgrade to ASDF 2 ---- and we explain how to do it. @xref{Loading ASDF}. +--- and we explain how to do that. @xref{Loading ASDF}. + +Also note that ASDF is not to be confused with ASDF-Install. +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 instead, +which works great 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. @node Loading ASDF, Configuring ASDF, Introduction, Top @@ -375,14 +384,15 @@ The default location for a user to install Common Lisp software is under If you install software there, you don't need further configuration. If you're installing software yourself at a location that isn't standard, you have to tell ASDF where you installed it. See below. -If you're using some tool to install software, +If you're using some tool to install software (e.g. Quicklisp), the authors of that tool should already have configured ASDF. The simplest way to add a path to your search path, say @file{/home/luser/.asd-link-farm/} is to create the directory @file{~/.config/common-lisp/source-registry.conf.d/} -and there create a file with any name of your choice but the type @file{conf}, +and there create a file with any name of your choice, +and with the type @file{conf}, for instance @file{42-asd-link-farm.conf} containing the line: @@ -984,7 +994,7 @@ or @code{#.(make-pathname ...)}. Note however, that @code{#p...} is a shorthand for @code{#.(parse-namestring ...)} and that the behavior of @code{parse-namestring} is completely non-portable, unless you are using Common Lisp @code{logical-pathname}s -(@pxref{The defsystem grammar,,Warning about logical pathnames}, below). +(@pxref{The defsystem grammar,,Using logical pathnames}, below). Pathnames made with @code{#.(make-pathname ...)} can usually be done more easily with the string syntax above. The only case that you really need a pathname object is to override @@ -1021,32 +1031,35 @@ API) and patch level. @xref{Common attributes of components}. -@subsection ASDF and logical pathnames: instructions and some cautions +@subsection Using logical pathnames @cindex logical pathnames -We recommend that you not use logical pathnames -in your asdf system definitions at this point, -but logical pathnames @emph{are} supported. +We do not generally recommend the use of logical pathnames, +especially not so to newcomers to Common Lisp. +However, we do support the use of logical pathnames by old timers, +when such is their preference. To use logical pathnames, you will have to provide a pathname object as a @code{:pathname} specifier to components that use it, using such syntax as @code{#p"LOGICAL-HOST:absolute;path;to;component.lisp"}. -You only have to specify such logical pathname for your system or -some top-level component. Sub-components' relative pathnames, specified -using the string syntax -for names, will be properly merged with the pathnames of their parents. +You only have to specify such logical pathname +for your system or some top-level component. +Sub-components' relative pathnames, +specified using the string syntax for names, +will be properly merged with the pathnames of their parents. The specification of a logical pathname host however is @emph{not} otherwise directly supported in the ASDF syntax for pathname specifiers as strings. The @code{asdf-output-translation} layer will -avoid trying to resolve and translate logical-pathnames. -The advantage of this is that you can define yourself what translations you want to use +avoid trying to resolve and translate logical pathnames. +The advantage of this is that +you can define yourself what translations you want to use with the logical pathname facility. -The disadvantage is that if you do not define such translations, any -system that uses logical pathnames will behave differently under +The disadvantage is that if you do not define such translations, +any system that uses logical pathnames will behave differently under asdf-output-translations than other systems you use. If you wish to use logical pathnames you will have to configure the @@ -1054,6 +1067,24 @@ translations yourself before they may be used. ASDF currently provides no specific support for defining logical pathname translations. +Note that the reasons we do not recommend logical pathnames are that +(1) there is no portable way to set up logical pathnames before they are used, +(2) logical pathnames are limited to only portably use +a single character case, digits and hyphens. +While you can solve the first issue on your own, +describing how to do it on each of fifteen implementations supported by ASDF +is more than we can document. +As for the second issue, mind that the limitation is notably enforced on SBCL, +and that you therefore can't portably violate the limitations +but must instead define some encoding of your own and add individual mappings +to name physical pathnames that do not fit the restrictions. +This can notably be a problem when your Lisp files are part of a larger project +in which it is common to name files or directories in a way that +includes the version numbers of supported protocols, +or in which files are shared with software written +in different programming languages where conventions include the use of +underscores, dots or CamelCase in pathnames. + @subsection Serial dependencies @cindex serial dependencies diff --git a/doc/index.html b/doc/index.html index 7f157f8a487612b2a42397aea0d81a51c1eaa830..ab28ed91b0602cb4cc7a48c7c4a20430c26422da 100644 --- a/doc/index.html +++ b/doc/index.html @@ -55,8 +55,14 @@ <a id="what_it_is_not"></a> <h3>What it is not</h3> <p>ASDF will not download missing software components for you. - For that, you want <a href="http://quicklisp.org/">quicklisp</a>. - (quicklisp builds upon ASDF.) + For that, you want <a href="http://quicklisp.org/">Quicklisp</a>, + that builds upon ASDF, and is great for pulling + a tarballs of packages you may depend upon, + or <a href="http://common-lisp.net/project/clbuild/">clbuild</a>, + that now builds upon Quicklisp, and is great for pulling + packages you need to modify from version control. + We recommend you should not use ASDF-Install anymore, + another such piece of software that is both unmaintained and obsolete. </p> <a id="documentation"></a> <h3>Documentation</h3>