/usr/share/doc/cl-asdf/examples/test1.script is in cl-asdf 2:3.0.3-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | ;;; -*- Lisp -*-
;; We need use the pathnames used by ASDF.
(defparameter test1.asd (system-source-file 'test1))
(defparameter file1.lisp (component-pathname (find-component 'test1 "file1")))
(defparameter file2.lisp (component-pathname (find-component 'test1 "file2")))
(assert-pathname-equal test1.asd (test-source "test1.asd")) ; unhappily, not usually equal.
(assert-pathname-equal file1.lisp (test-source "file1.lisp")) ; unhappily, not usually equal.
(assert-pathname-equal file2.lisp (test-source "file2.lisp")) ; unhappily, not usually equal.
(defparameter *file1.out* (output-files 'compile-op '(test1 "file1")))
(defparameter *file2.out* (output-files 'compile-op '(test1 "file2")))
(defparameter file1.fasl (first *file1.out*))
(defparameter file2.fasl (first *file2.out*))
(assert-pathname-equal file1.fasl (test-fasl "file1"))
(assert-pathname-equal file2.fasl (test-fasl "file2"))
(defparameter *date* (- (file-write-date test1.asd) 3600))
(touch-file test1.asd :timestamp *date*) ;; touch test1.asd an hour back.
(touch-file file1.lisp :timestamp *date* :offset 100)
(touch-file file2.lisp :timestamp *date* :offset 200)
(assert-equal (get-file-stamp file1.lisp) (+ *date* 100))
(assert-equal (get-file-stamp file2.lisp) (+ *date* 200))
(DBG "loading test1")
(load-system 'test1)
(defparameter *then* (file-write-date (first *file2.out*)))
(assert-compare (<= (+ *date* 3600) *then*))
(DBG "test that it compiled" *date* *then*)
(dolist (f (append *file1.out* *file2.out*))
(eval `(assert (probe-file ,f))))
(DBG "and loaded")
(assert (asymval :*file1* :test-package))
(DBG "now remove file2 that depends-on file1")
(dolist (f *file1.out*) (touch-file f :timestamp (+ *date* 500)))
(assert-equal (+ *date* 500) (get-file-stamp file1.fasl))
(map () 'mark-file-deleted *file2.out*)
(clear-system 'test1)
(DBG "load again")
;;(trace input-files asdf::compute-action-stamp)
(defparameter *plan* (nth-value 1 (operate 'load-op 'test1)))
(DBG "check that file1 is _not_ recompiled, but file2 is")
(assert (in-plan-p *plan* '(compile-op "test1" "file2")))
(assert (not (in-plan-p *plan* '(compile-op "test1" "file1"))))
(assert-equal (+ *date* 500) (get-file-stamp file1.fasl))
(defparameter *before* (get-file-stamp file2.fasl))
(assert-compare (<= *then* *before*))
(DBG "now touch file1 and check that file2 _is_ also recompiled")
;; XXX run-shell-command loses if *default-pathname-defaults* is not the
;; unix cwd. this is not a problem for run-tests.sh, but can be in general
(touch-file file1.lisp :timestamp (+ *date* 3000)) ;; touch file1 a minute ago.
(dolist (f *file2.out*) (touch-file f :timestamp (+ *date* 2000))) ;; touch file2.fasl some time before.
(asdf:clear-system 'test1)
(asdf:operate 'asdf:load-op 'test1)
(DBG :foo (file-write-date file2.fasl) *before*)
(assert-compare (>= (file-write-date file2.fasl) *before*))
|