Loading asdf.lisp +34 −12 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ (eval-when (:load-toplevel :compile-toplevel :execute) (let* ((asdf-version ;; the 1+ helps the version bumping script discriminate (subseq "VERSION:2.003" (1+ (length "VERSION")))) ; NB: same as 2.105. (subseq "VERSION:2.004" (1+ (length "VERSION")))) ; NB: same as 2.111. (existing-asdf (find-package :asdf)) (vername '#:*asdf-version*) (versym (and existing-asdf Loading Loading @@ -727,8 +727,12 @@ actually-existing directory." #+clisp (defun get-uid () (posix:uid)) #+sbcl (defun get-uid () (sb-unix:unix-getuid)) #+cmu (defun get-uid () (unix:unix-getuid)) #+ecl (ffi:clines "#include <sys/types.h>" "#include <unistd.h>") #+ecl (defun get-uid () (ffi:c-inline () () :int "getuid()" :one-liner t)) #+ecl #.(cl:and (cl:< ext:+ecl-version-number+ 100601) '(ffi:clines "#include <sys/types.h>" "#include <unistd.h>")) #+ecl (defun get-uid () #.(cl:if (cl:< ext:+ecl-version-number+ 100601) '(ffi:c-inline () () :int "getuid()" :one-liner t) '(ext::getuid))) #+allegro (defun get-uid () (excl.osi:getuid)) #-(or cmu sbcl clisp allegro ecl) (defun get-uid () Loading Loading @@ -1073,6 +1077,17 @@ of which is a system object.") (defun system-registered-p (name) (gethash (coerce-name name) *defined-systems*)) (defun clear-system (name) "Clear the entry for a system in the database of systems previously loaded. Note that this does NOT in any way cause the code of the system to be unloaded." ;; There is no "unload" operation in Common Lisp, and a general such operation ;; cannot be portably written, considering how much CL relies on side-effects ;; of global data structures. ;; Note that this does a setf gethash instead of a remhash ;; this way there remains a hint in the *defined-systems* table ;; that the system was loaded at some point. (setf (gethash (coerce-name name) *defined-systems*) nil)) (defun map-systems (fn) "Apply FN to each defined system. Loading Loading @@ -2392,7 +2407,9 @@ located." (defparameter *architecture-features* '((:x86-64 :amd64 :x86_64 :x8664-target) (:x86 :i686 :i586 :pentium3 :i486 :i386 :pc386 :iapx386 :x8632-target :pentium4) :hppa64 :hppa :ppc64 (:ppc32 :ppc :powerpc) :sparc64 :sparc)) :hppa64 :hppa :ppc64 (:ppc32 :ppc :powerpc) :sparc64 :sparc :java-1.4 :java-1.5 :java-1.6 :java-1.7)) (defun lisp-version-string () (let ((s (lisp-implementation-version))) Loading @@ -2409,6 +2426,7 @@ located." (:-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)) #+clozure (format nil "~d.~d-fasl~d" ccl::*openmcl-major-version* Loading @@ -2423,8 +2441,8 @@ located." #+gcl (subseq s (1+ (position #\space s))) #+lispworks (format nil "~A~@[~A~]" s (when (member :lispworks-64bit *features*) "-64bit")) ;; #+sbcl (format nil "~a-fasl~d" s sb-fasl:+fasl-file-version+) ; fasl-f-v is redundant #+(or armedbear cormanlisp mcl sbcl scl) s ;; #+sbcl (format nil "~a-fasl~d" s sb-fasl:+fasl-file-version+) ; f-f-v redundant w/ version #+(or cormanlisp mcl sbcl scl) s #-(or allegro armedbear clisp clozure cmu cormanlisp digitool ecl gcl lispworks mcl sbcl scl) s)) Loading Loading @@ -2508,7 +2526,7 @@ located." `(,@`(#+lispworks ,(try (sys:get-folder-path :local-appdata) "common-lisp/config/") ;;; read-windows-registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common AppData ,(try (getenv "ALLUSERSPROFILE") "Application Data/common-lisp/config/")))) (list #p"/etc/")))) (list #p"/etc/common-lisp/")))) (defun in-first-directory (dirs x) (loop :for dir :in dirs :thereis (and dir (ignore-errors Loading Loading @@ -2955,7 +2973,7 @@ effectively disabling the output translation facility." :defaults x)) (defun delete-file-if-exists (x) (when (probe-file x) (when (and x (probe-file x)) (delete-file x))) (defun compile-file* (input-file &rest keys &key &allow-other-keys) Loading Loading @@ -3352,14 +3370,18 @@ with a different configuration, so the configuration would be re-read then." (defun initialize-source-registry (&optional parameter) (setf (source-registry) (compute-source-registry parameter))) ;; checks an initial variable to see whether the state is initialized ;; Checks an initial variable to see whether the state is initialized ;; or cleared. In the former case, return current configuration; in ;; the latter, initialize. ASDF will call this function at the start ;; of (asdf:find-system). (defun ensure-source-registry () ;; of (asdf:find-system) to make sure the source registry is initialized. ;; However, it will do so *without* a parameter, at which point it ;; will be too late to provide a parameter to this function, though ;; you may override the configuration explicitly by calling ;; initialize-source-registry directly with your parameter. (defun ensure-source-registry (&optional parameter) (if (source-registry-initialized-p) (source-registry) (initialize-source-registry))) (initialize-source-registry parameter))) (defun sysdef-source-registry-search (system) (ensure-source-registry) Loading doc/asdf.texinfo +38 −6 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @titlepage @title asdf: another system definition facility @title ASDF: Another System Definition Facility @c The following two commands start the copyright page. @page Loading Loading @@ -2494,13 +2494,45 @@ as pathname specifiers for components. @defun system-source-directory system-designator ASDF does not provide a turnkey solution for locating data (or other miscellaneous) files that are distributed together with the source code of a system. Programmers can use @code{system-source-directory} to find such files. Returns a pathname object. The @var{system-designator} may be a string, symbol, or ASDF system object. ASDF does not provide a turnkey solution for locating data (or other miscellaneous) files that are distributed together with the source code of a system. Programmers can use @code{system-source-directory} to find such files. Returns a pathname object. The @var{system-designator} may be a string, symbol, or ASDF system object. @end defun @defun clear-system system-designator It is sometimes useful to force recompilation of a previously loaded system. In these cases, it may be useful to @code{(asdf:clear-system :foo)} to remove the system from the table of currently loaded systems; the next time the system @code{foo} or one that depends on it is re-loaded, @code{foo} will then be loaded again. Alternatively, you could touch @code{foo.asd} or remove the corresponding fasls from the output file cache. (It was once conceived that one should provide a list of systems the recompilation of which to force as the @code{:force} keyword argument to @code{load-system}; but this has never worked, and though the feature was fixed in ASDF 2.000, it remains @code{cerror}'ed out as nobody ever used it.) Note that this does not and cannot by itself undo the previous loading of the system. Common Lisp has no provision for such an operation, and its reliance on irreversible side-effects to global datastructures makes such a thing impossible in the general case. If the software being re-loaded is not conceived with hot upgrade in mind, this re-loading may cause many errors, warnings or subtle silent problems, as packages, generic function signatures, structures, types, macros, constants, etc. are being redefined incompatibly. It is up to the user to make sure that reloading is possible and has the desired effect. In some cases, extreme measures such as recursively deleting packages, unregistering symbols, defining methods on @code{update-instance-for-redefined-class} and much more are necessary for reloading to happen smoothly. ASDF itself goes through notable pains to make such a hot upgrade possible with respect to its own code, and what it does is ridiculously complex; look at the beginning of @file{asdf.lisp} to see what it does. @end defun @node Getting the latest version, FAQ, Miscellaneous additional functionality, Top @comment node-name, next, previous, up Loading doc/index.html +1 −1 Original line number Diff line number Diff line Loading @@ -53,7 +53,7 @@ <li><a href="http://common-lisp.net/gitweb?p=projects/asdf/asdf.git;a=blob;f=asdf.texinfo">as texinfo source</a></li> </ul> <a href="downloads"></a> <a id="downloads"></a> <h3>Getting it</h3> <p>Though they may lag behind the version here, ASDF comes bundled with most Lisps. To get the greatest and latest, you can: Loading Loading
asdf.lisp +34 −12 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ (eval-when (:load-toplevel :compile-toplevel :execute) (let* ((asdf-version ;; the 1+ helps the version bumping script discriminate (subseq "VERSION:2.003" (1+ (length "VERSION")))) ; NB: same as 2.105. (subseq "VERSION:2.004" (1+ (length "VERSION")))) ; NB: same as 2.111. (existing-asdf (find-package :asdf)) (vername '#:*asdf-version*) (versym (and existing-asdf Loading Loading @@ -727,8 +727,12 @@ actually-existing directory." #+clisp (defun get-uid () (posix:uid)) #+sbcl (defun get-uid () (sb-unix:unix-getuid)) #+cmu (defun get-uid () (unix:unix-getuid)) #+ecl (ffi:clines "#include <sys/types.h>" "#include <unistd.h>") #+ecl (defun get-uid () (ffi:c-inline () () :int "getuid()" :one-liner t)) #+ecl #.(cl:and (cl:< ext:+ecl-version-number+ 100601) '(ffi:clines "#include <sys/types.h>" "#include <unistd.h>")) #+ecl (defun get-uid () #.(cl:if (cl:< ext:+ecl-version-number+ 100601) '(ffi:c-inline () () :int "getuid()" :one-liner t) '(ext::getuid))) #+allegro (defun get-uid () (excl.osi:getuid)) #-(or cmu sbcl clisp allegro ecl) (defun get-uid () Loading Loading @@ -1073,6 +1077,17 @@ of which is a system object.") (defun system-registered-p (name) (gethash (coerce-name name) *defined-systems*)) (defun clear-system (name) "Clear the entry for a system in the database of systems previously loaded. Note that this does NOT in any way cause the code of the system to be unloaded." ;; There is no "unload" operation in Common Lisp, and a general such operation ;; cannot be portably written, considering how much CL relies on side-effects ;; of global data structures. ;; Note that this does a setf gethash instead of a remhash ;; this way there remains a hint in the *defined-systems* table ;; that the system was loaded at some point. (setf (gethash (coerce-name name) *defined-systems*) nil)) (defun map-systems (fn) "Apply FN to each defined system. Loading Loading @@ -2392,7 +2407,9 @@ located." (defparameter *architecture-features* '((:x86-64 :amd64 :x86_64 :x8664-target) (:x86 :i686 :i586 :pentium3 :i486 :i386 :pc386 :iapx386 :x8632-target :pentium4) :hppa64 :hppa :ppc64 (:ppc32 :ppc :powerpc) :sparc64 :sparc)) :hppa64 :hppa :ppc64 (:ppc32 :ppc :powerpc) :sparc64 :sparc :java-1.4 :java-1.5 :java-1.6 :java-1.7)) (defun lisp-version-string () (let ((s (lisp-implementation-version))) Loading @@ -2409,6 +2426,7 @@ located." (:-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)) #+clozure (format nil "~d.~d-fasl~d" ccl::*openmcl-major-version* Loading @@ -2423,8 +2441,8 @@ located." #+gcl (subseq s (1+ (position #\space s))) #+lispworks (format nil "~A~@[~A~]" s (when (member :lispworks-64bit *features*) "-64bit")) ;; #+sbcl (format nil "~a-fasl~d" s sb-fasl:+fasl-file-version+) ; fasl-f-v is redundant #+(or armedbear cormanlisp mcl sbcl scl) s ;; #+sbcl (format nil "~a-fasl~d" s sb-fasl:+fasl-file-version+) ; f-f-v redundant w/ version #+(or cormanlisp mcl sbcl scl) s #-(or allegro armedbear clisp clozure cmu cormanlisp digitool ecl gcl lispworks mcl sbcl scl) s)) Loading Loading @@ -2508,7 +2526,7 @@ located." `(,@`(#+lispworks ,(try (sys:get-folder-path :local-appdata) "common-lisp/config/") ;;; read-windows-registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common AppData ,(try (getenv "ALLUSERSPROFILE") "Application Data/common-lisp/config/")))) (list #p"/etc/")))) (list #p"/etc/common-lisp/")))) (defun in-first-directory (dirs x) (loop :for dir :in dirs :thereis (and dir (ignore-errors Loading Loading @@ -2955,7 +2973,7 @@ effectively disabling the output translation facility." :defaults x)) (defun delete-file-if-exists (x) (when (probe-file x) (when (and x (probe-file x)) (delete-file x))) (defun compile-file* (input-file &rest keys &key &allow-other-keys) Loading Loading @@ -3352,14 +3370,18 @@ with a different configuration, so the configuration would be re-read then." (defun initialize-source-registry (&optional parameter) (setf (source-registry) (compute-source-registry parameter))) ;; checks an initial variable to see whether the state is initialized ;; Checks an initial variable to see whether the state is initialized ;; or cleared. In the former case, return current configuration; in ;; the latter, initialize. ASDF will call this function at the start ;; of (asdf:find-system). (defun ensure-source-registry () ;; of (asdf:find-system) to make sure the source registry is initialized. ;; However, it will do so *without* a parameter, at which point it ;; will be too late to provide a parameter to this function, though ;; you may override the configuration explicitly by calling ;; initialize-source-registry directly with your parameter. (defun ensure-source-registry (&optional parameter) (if (source-registry-initialized-p) (source-registry) (initialize-source-registry))) (initialize-source-registry parameter))) (defun sysdef-source-registry-search (system) (ensure-source-registry) Loading
doc/asdf.texinfo +38 −6 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @titlepage @title asdf: another system definition facility @title ASDF: Another System Definition Facility @c The following two commands start the copyright page. @page Loading Loading @@ -2494,13 +2494,45 @@ as pathname specifiers for components. @defun system-source-directory system-designator ASDF does not provide a turnkey solution for locating data (or other miscellaneous) files that are distributed together with the source code of a system. Programmers can use @code{system-source-directory} to find such files. Returns a pathname object. The @var{system-designator} may be a string, symbol, or ASDF system object. ASDF does not provide a turnkey solution for locating data (or other miscellaneous) files that are distributed together with the source code of a system. Programmers can use @code{system-source-directory} to find such files. Returns a pathname object. The @var{system-designator} may be a string, symbol, or ASDF system object. @end defun @defun clear-system system-designator It is sometimes useful to force recompilation of a previously loaded system. In these cases, it may be useful to @code{(asdf:clear-system :foo)} to remove the system from the table of currently loaded systems; the next time the system @code{foo} or one that depends on it is re-loaded, @code{foo} will then be loaded again. Alternatively, you could touch @code{foo.asd} or remove the corresponding fasls from the output file cache. (It was once conceived that one should provide a list of systems the recompilation of which to force as the @code{:force} keyword argument to @code{load-system}; but this has never worked, and though the feature was fixed in ASDF 2.000, it remains @code{cerror}'ed out as nobody ever used it.) Note that this does not and cannot by itself undo the previous loading of the system. Common Lisp has no provision for such an operation, and its reliance on irreversible side-effects to global datastructures makes such a thing impossible in the general case. If the software being re-loaded is not conceived with hot upgrade in mind, this re-loading may cause many errors, warnings or subtle silent problems, as packages, generic function signatures, structures, types, macros, constants, etc. are being redefined incompatibly. It is up to the user to make sure that reloading is possible and has the desired effect. In some cases, extreme measures such as recursively deleting packages, unregistering symbols, defining methods on @code{update-instance-for-redefined-class} and much more are necessary for reloading to happen smoothly. ASDF itself goes through notable pains to make such a hot upgrade possible with respect to its own code, and what it does is ridiculously complex; look at the beginning of @file{asdf.lisp} to see what it does. @end defun @node Getting the latest version, FAQ, Miscellaneous additional functionality, Top @comment node-name, next, previous, up Loading
doc/index.html +1 −1 Original line number Diff line number Diff line Loading @@ -53,7 +53,7 @@ <li><a href="http://common-lisp.net/gitweb?p=projects/asdf/asdf.git;a=blob;f=asdf.texinfo">as texinfo source</a></li> </ul> <a href="downloads"></a> <a id="downloads"></a> <h3>Getting it</h3> <p>Though they may lag behind the version here, ASDF comes bundled with most Lisps. To get the greatest and latest, you can: Loading