From: Christophe R. <cr...@us...> - 2006-08-21 16:25:16
|
Update of /cvsroot/sbcl/sbcl/contrib/asdf In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv15666/contrib/asdf Modified Files: asdf.lisp README Log Message: 0.9.15.42: Move to latest upstream ASDF. (Contains a workaround for systems that have been placed in CL-USER) Index: asdf.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/contrib/asdf/asdf.lisp,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- asdf.lisp 19 Jun 2006 00:18:38 -0000 1.22 +++ asdf.lisp 21 Aug 2006 16:25:11 -0000 1.23 @@ -1,4 +1,4 @@ -;;; This is asdf: Another System Definition Facility. 1.99 +;;; This is asdf: Another System Definition Facility. 1.101 ;;; ;;; Feedback, bug reports, and patches are all welcome: please mail to ;;; <ccl...@li...>. But note first that the canonical @@ -101,6 +101,8 @@ #:retry #:accept ; restarts + #:preference-file-for-system/operation + #:load-preferences ) (:use :cl)) @@ -110,7 +112,7 @@ (in-package #:asdf) -(defvar *asdf-revision* (let* ((v "1.99") +(defvar *asdf-revision* (let* ((v "1.101") (colon (or (position #\: v) -1)) (dot (position #\. v))) (and v colon dot @@ -732,7 +734,8 @@ (defmethod perform :after ((operation operation) (c component)) (setf (gethash (type-of operation) (component-operation-times c)) - (get-universal-time))) + (get-universal-time)) + (load-preferences c operation)) ;;; perform is required to check output-files to find out where to put ;;; its answers, in case it has been overridden for site policy @@ -741,8 +744,8 @@ (let ((source-file (component-pathname c)) (output-file (car (output-files operation c)))) (multiple-value-bind (output warnings-p failure-p) - (compile-file source-file - :output-file output-file) + (compile-file source-file + :output-file output-file) ;(declare (ignore output)) (when warnings-p (case (operation-on-warnings operation) @@ -773,7 +776,9 @@ ;;; load-op -(defclass load-op (operation) ()) +(defclass basic-load-op (operation) ()) + +(defclass load-op (basic-load-op) ()) (defmethod perform ((o load-op) (c cl-source-file)) (mapcar #'load (input-files o c))) @@ -792,7 +797,7 @@ ;;; load-source-op -(defclass load-source-op (operation) ()) +(defclass load-source-op (basic-load-op) ()) (defmethod perform ((o load-source-op) (c cl-source-file)) (let ((source (component-pathname c))) @@ -827,6 +832,38 @@ (defmethod perform ((operation test-op) (c component)) nil) +(defgeneric load-preferences (system operation) + (:documentation "Called to load system preferences after <perform operation system>. Typical uses are to set parameters that don't exist until after the system has been loaded.")) + +(defgeneric preference-file-for-system/operation (system operation) + (:documentation "Returns the pathname of the preference file for this system. Called by 'load-preferences to determine what file to load.")) + +(defmethod load-preferences ((s t) (operation t)) + ;; do nothing + (values)) + +(defmethod load-preferences ((s system) (operation basic-load-op)) + (let* ((*package* (find-package :common-lisp)) + (file (probe-file (preference-file-for-system/operation s operation)))) + (when file + (when *verbose-out* + (format *verbose-out* + "~&~@<; ~@;loading preferences for ~A/~(~A~) from ~A~@:>~%" + (component-name s) + (type-of operation) file)) + (load file)))) + +(defmethod preference-file-for-system/operation ((system t) (operation t)) + ;; cope with anything other than systems + (preference-file-for-system/operation (find-system system t) operation)) + +(defmethod preference-file-for-system/operation ((s system) (operation t)) + (merge-pathnames + (make-pathname :name (component-name s) + :type "lisp" + :directory '(:relative ".asdf")) + (truename (user-homedir-pathname)))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; invoking operations @@ -909,11 +946,16 @@ (defun class-for-type (parent type) - (let ((class - (find-class - (or (find-symbol (symbol-name type) *package*) - (find-symbol (symbol-name type) #.(package-name *package*))) - nil))) + (let* ((extra-symbols (list (find-symbol (symbol-name type) *package*) + (find-symbol (symbol-name type) + #.(package-name *package*)))) + (class (dolist (symbol (if (keywordp type) + extra-symbols + (cons type extra-symbols))) + (when (and symbol + (find-class symbol nil) + (subtypep symbol 'component)) + (return (find-class symbol)))))) (or class (and (eq type :file) (or (module-default-component-class parent) @@ -1173,3 +1215,4 @@ (pushnew 'contrib-sysdef-search *system-definition-search-functions*)) (provide 'asdf) + Index: README =================================================================== RCS file: /cvsroot/sbcl/sbcl/contrib/asdf/README,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- README 31 Aug 2005 14:43:45 -0000 1.3 +++ README 21 Aug 2006 16:25:11 -0000 1.4 @@ -1,4 +1,4 @@ -README,v 1.38 2004/07/19 21:18:07 crhodes Exp -*- Text -*- +README,v 1.39 2006/08/21 10:52:32 crhodes Exp -*- Text -*- The canonical documentation for asdf is in the file asdf.texinfo. The significant overlap between this file and that will one day be @@ -117,9 +117,10 @@ asdf is extensible to new operations and to new component types. This allows the addition of behaviours: for example, a new component could -be added for Java JAR archives, and methods specialised on -compile-op added for it that would accomplish the relevant -actions. +be added for Java JAR archives, and methods specialised on compile-op +added for it that would accomplish the relevant actions. Users +defining their own operations and component types should inherit from +the asdf base classes asdf:operation and asdf:component respectively. * Inspiration @@ -478,7 +479,9 @@ not overwrite each others operations. The user may also wish to (and is recommended to) include defpackage and in-package forms in his system definition files, however, so that they can be loaded manually -if need be. +if need be. It is not recommended to use the CL-USER package for this +purpose, as definitions made in this package will affect the parsing +of asdf systems. For convenience in the normal case, and for backward compatibility with the spirit of mk-defsystem, the default contents of |