On 6/30/17 Jun 30 -10:11 AM, Faré wrote:
First, can you confirm that the compute-action-stamp called by mark-operation-done called by the perform :after method on define-op returns the correct value?
Hm. I don't see any such after method. All I see is this:
(defmethod perform ((o define-op) (s system)) (assert (equal (coerce-name s) (primary-system-name s))) (nest (if-let ((pathname (first (input-files o s))))) (with-standard-io-syntax) (let ((*print-readably* nil) ;; Note that our backward-compatible *readtable* is ;; a global readtable that gets globally side-effected. Ouch. ;; Same for the *print-pprint-dispatch* table. ;; We should do something about that for ASDF3 if possible, or else ASDF4. (*readtable* *readtable*) (*print-pprint-dispatch* *print-pprint-dispatch*) (*package* (find-package :asdf-user)) (*default-pathname-defaults* ;; resolve logical-pathnames so they won't wreak havoc in parsing namestrings. (pathname-directory-pathname (physicalize-pathname pathname))))) (handler-bind (((and error (not missing-component)) #'(lambda (condition) (error 'load-system-definition-error :name (coerce-name s) :pathname pathname :condition condition)))) (asdf-message (compatfmt "~&~@<; ~@;Loading system definition~@[ for ~A~] from ~A~@:>~%") (coerce-name s) pathname) ;; dependencies will depend on what's loaded via definition-dependency-list (unset-asdf-cache-entry `(component-depends-on ,o ,s))) (load* pathname :external-format (encoding-external-format (detect-encoding pathname)))))
This looks like it should do the right thing, but I don't know. At any rate, I'm having a hard time tracking down exactly where we determine whether or not a define-op needs redoing. The caching code makes things much more efficient, but it also effectively camouflages the algorithm....
Cheers, r
best, r