make-is-out-of-date? is more readable now; small improvement

target-mtime doesn't need to be checked for each prereq.
This commit is contained in:
jottbee 2005-02-15 18:54:47 +00:00
parent 9e1b812cfd
commit c411f67a2c
1 changed files with 22 additions and 18 deletions

View File

@ -6,7 +6,7 @@
(let ((cooked-state (last args)) (let ((cooked-state (last args))
(prereqs-results (cdr (reverse (cdr args))))) (prereqs-results (cdr (reverse (cdr args)))))
(cons (begin (cons (begin
(display ";;; rule : ") (display ";;; file : ")
(display target) (display target)
(newline) (newline)
(bind-fluids-gnu target prereqs prereqs-results thunk)) (bind-fluids-gnu target prereqs prereqs-results thunk))
@ -61,18 +61,22 @@
(cons (file-not-exists? target) init-state)))) (cons (file-not-exists? target) init-state))))
(define (make-is-out-of-date? target . prereqs) (define (make-is-out-of-date? target . prereqs)
(lambda args (lambda args
; (breakpoint "make-is-out-of-date?") ; (breakpoint "make-is-out-of-date?")
(let ((init-state (last args))) (let ((init-state (last args)))
(cons (or (file-not-exists? target) (cons (if (file-not-exists? target)
(and (not (null? prereqs)) #t
(let for-each-prereq ((prereq (car prereqs)) (if (null? prereqs)
(todo (cdr prereqs))) #f
(cond (let ((target-mtime (file-last-mod target)))
((file-not-exists? prereq) #t) (let for-each-prereq ((prereq (car prereqs))
((> (file-last-mod prereq) (file-last-mod target)) #t) (todo (cdr prereqs)))
((null? todo) #f) (cond
(else (for-each-prereq (car todo) (cdr todo))))))) ((file-not-exists? prereq)
(error "nonexistent prerequisite" prereq))
((> (file-last-mod prereq) target-mtime) #t)
((null? todo) #f)
(else (for-each-prereq (car todo) (cdr todo))))))))
init-state)))) init-state))))
(define (make-md5-sum-changed? target . prereqs) (define (make-md5-sum-changed? target . prereqs)
@ -86,13 +90,13 @@
(let* ((bname (string-append basename extension)) (let* ((bname (string-append basename extension))
(file (expand-file-name bname (cwd)))) (file (expand-file-name bname (cwd))))
(if (file-exists? file) (if (file-exists? file)
(let* ((outport (open-input-file file)) (let* ((outport (open-input-file file))
(strls (port->string-list outport))) (strls (port->string-list outport)))
;; (display ";;; using : ") (display bname) (newline) ;; (display ";;; using : ") (display bname) (newline)
(if (null? strls) (if (null? strls)
#f #f
(string->number (car strls)))) (string->number (car strls))))
#f))) #f)))
(define (checksum-into-file basename extension checksum) (define (checksum-into-file basename extension checksum)
(let* ((bname (string-append basename extension)) (let* ((bname (string-append basename extension))