Loading asdf.lisp +10 −0 Original line number Diff line number Diff line Loading @@ -467,6 +467,16 @@ processed in order by OPERATE.")) ;;;; General Purpose Utilities (defmacro while-collecting ((&rest collectors) &body body) "COLLECTORS should be a list of names for collections. A collector defines a function that, when applied to an argument inside BODY, will add its argument to the corresponding collection. Returns multiple values, a list for each collection, in order. E.g., \(while-collecting \(foo bar\) \(dolist \(x '\(\(a 1\) \(b 2\) \(c 3\)\)\) \(foo \(first x\)\) \(bar \(second x\)\)\)\) Returns two values: \(A B C\) and \(1 2 3\)." (let ((vars (mapcar #'(lambda (x) (gensym (symbol-name x))) collectors)) (initial-values (mapcar (constantly nil) collectors))) `(let ,(mapcar #'list vars initial-values) Loading test/test-redundant-recompile.asd 0 → 100644 +16 −0 Original line number Diff line number Diff line ;;; -*- Lisp -*- (asdf:defsystem test-redundant-recompile :components ((:file "file2" :in-order-to ((compile-op (load-op "file1")) (load-op (load-op "file1")))) (:file "file1"))) #| ;;;This test system definition attempts to replicate the excess dependencies ;;;that seem to give rise to launchpad bug 590517 ;;;(https://bugs.launchpad.net/asdf/+bug/590517) 1) from clean, check that all fasl files build and that some function defined in the second file is present 2) load again. Check to make sure that nothing is recompiled. |# test/test-redundant-recompile.script 0 → 100644 +28 −0 Original line number Diff line number Diff line ;;; -*- Lisp -*- (load "script-support") (load-asdf) (quit-on-error (setf asdf:*central-registry* '(*default-pathname-defaults*)) (asdf:operate 'asdf:load-op 'test-redundant-recompile) ;; test that it compiled (let* ((file1 (asdf:compile-file-pathname* "file1")) (file2 (asdf:compile-file-pathname* "file2")) (file1-date (file-write-date file1)) (file2-date (file-write-date file2))) (format t "~&test-redundant-recompile 1: ~S ~S~%" file1 file1-date) (format t "~&test-redundant-recompile 2: ~S ~S~%" file2 file2-date) (assert file1-date) (assert file2-date) ;; and loaded (assert (symbol-value (find-symbol (symbol-name :*file1*) :test-package))) ;; now rerun the load-op and check that no files are recompiled ;;(trace asdf::operation-done-p asdf::traverse) (asdf:operate 'asdf:load-op 'test-redundant-recompile) (assert (= file1-date (file-write-date file1))) (assert (= file2-date (file-write-date file2))))) Loading
asdf.lisp +10 −0 Original line number Diff line number Diff line Loading @@ -467,6 +467,16 @@ processed in order by OPERATE.")) ;;;; General Purpose Utilities (defmacro while-collecting ((&rest collectors) &body body) "COLLECTORS should be a list of names for collections. A collector defines a function that, when applied to an argument inside BODY, will add its argument to the corresponding collection. Returns multiple values, a list for each collection, in order. E.g., \(while-collecting \(foo bar\) \(dolist \(x '\(\(a 1\) \(b 2\) \(c 3\)\)\) \(foo \(first x\)\) \(bar \(second x\)\)\)\) Returns two values: \(A B C\) and \(1 2 3\)." (let ((vars (mapcar #'(lambda (x) (gensym (symbol-name x))) collectors)) (initial-values (mapcar (constantly nil) collectors))) `(let ,(mapcar #'list vars initial-values) Loading
test/test-redundant-recompile.asd 0 → 100644 +16 −0 Original line number Diff line number Diff line ;;; -*- Lisp -*- (asdf:defsystem test-redundant-recompile :components ((:file "file2" :in-order-to ((compile-op (load-op "file1")) (load-op (load-op "file1")))) (:file "file1"))) #| ;;;This test system definition attempts to replicate the excess dependencies ;;;that seem to give rise to launchpad bug 590517 ;;;(https://bugs.launchpad.net/asdf/+bug/590517) 1) from clean, check that all fasl files build and that some function defined in the second file is present 2) load again. Check to make sure that nothing is recompiled. |#
test/test-redundant-recompile.script 0 → 100644 +28 −0 Original line number Diff line number Diff line ;;; -*- Lisp -*- (load "script-support") (load-asdf) (quit-on-error (setf asdf:*central-registry* '(*default-pathname-defaults*)) (asdf:operate 'asdf:load-op 'test-redundant-recompile) ;; test that it compiled (let* ((file1 (asdf:compile-file-pathname* "file1")) (file2 (asdf:compile-file-pathname* "file2")) (file1-date (file-write-date file1)) (file2-date (file-write-date file2))) (format t "~&test-redundant-recompile 1: ~S ~S~%" file1 file1-date) (format t "~&test-redundant-recompile 2: ~S ~S~%" file2 file2-date) (assert file1-date) (assert file2-date) ;; and loaded (assert (symbol-value (find-symbol (symbol-name :*file1*) :test-package))) ;; now rerun the load-op and check that no files are recompiled ;;(trace asdf::operation-done-p asdf::traverse) (asdf:operate 'asdf:load-op 'test-redundant-recompile) (assert (= file1-date (file-write-date file1))) (assert (= file2-date (file-write-date file2)))))