*** empty log message ***
This commit is contained in:
parent
2ee328949e
commit
053efed211
118
makros.scm
118
makros.scm
|
@ -1,118 +0,0 @@
|
||||||
(define *fname->rule*-table '())
|
|
||||||
(define rule-set (make-empty-rule-set))
|
|
||||||
|
|
||||||
;;; (*fname->rule*-get fname) ---> rule
|
|
||||||
(define (*fname->rule*-get fname)
|
|
||||||
(let ((rule-found? (assoc fname *fname->rule*-table)))
|
|
||||||
(if rule-found? (cdr rule-found?))))
|
|
||||||
|
|
||||||
;;; (*fname->rule*-add! fname) ---> {}
|
|
||||||
(define (*fname->rule*-add! fname rule)
|
|
||||||
(let ((rule-found? (assoc fname *fname->rule*-table)))
|
|
||||||
(if rule-found?
|
|
||||||
(error "There already exists a rule with this fname!")
|
|
||||||
(begin
|
|
||||||
(set! *fname->rule*-table
|
|
||||||
(alist-cons fname rule *fname->rule*-table))
|
|
||||||
(set! rule-set (rule-set-add rule rule-set))))))
|
|
||||||
|
|
||||||
(define-syntax make
|
|
||||||
(syntax-rules ()
|
|
||||||
((make ?fname ?state)
|
|
||||||
(rule-make (*fname->rule*-get ?fname)
|
|
||||||
?state
|
|
||||||
rule-set))))
|
|
||||||
|
|
||||||
(define-syntax makefile
|
|
||||||
(syntax-rules ()
|
|
||||||
((makefile ?rule0 ...)
|
|
||||||
(begin
|
|
||||||
(set! rule-set (make-empty-rule-set))
|
|
||||||
?rule0 ...))))
|
|
||||||
|
|
||||||
(define-syntax make-is-out-of-date?
|
|
||||||
(syntax-rules ()
|
|
||||||
((make-is-out-of-date? ?target)
|
|
||||||
(lambda ?args
|
|
||||||
(cons (file-not-exists? ?target) ?args)))
|
|
||||||
((make-is-out-of-date? ?target ?prereq0 ...)
|
|
||||||
(lambda ?args
|
|
||||||
(cons (or (file-not-exists? ?target)
|
|
||||||
(> (file-last-mod ?prereq0)
|
|
||||||
(file-last-mod ?target))
|
|
||||||
...)
|
|
||||||
(last ?args))))))
|
|
||||||
|
|
||||||
(define-syntax make-has-md5-digest=?
|
|
||||||
(syntax-rules ()
|
|
||||||
((make-has-md5-digest=? ?fingerprint ?target)
|
|
||||||
(lambda ?args
|
|
||||||
(cons (or (file-not-exists? ?target)
|
|
||||||
(=? (md5-digest-for-port (open-input-file ?target))
|
|
||||||
?fingerprint))
|
|
||||||
?args)))
|
|
||||||
((make-has-md5-digest=? ?fingerprint ?target ?prereq0 ...)
|
|
||||||
(lambda ?args
|
|
||||||
(cons (or (file-not-exists? ?target)
|
|
||||||
(=? (md5-digest->number (md5-digest-for-port
|
|
||||||
(open-input-file ?target)))
|
|
||||||
(md5-digest->number ?fingerprint)))
|
|
||||||
(last ?args))))))
|
|
||||||
|
|
||||||
(define-syntax makefile-rule
|
|
||||||
(syntax-rules ()
|
|
||||||
((makefile-rule ?target (?prereq0 ...) ?thunk)
|
|
||||||
(makefile-rule-tmpvars () ?target (?prereq0 ...) ?thunk))))
|
|
||||||
|
|
||||||
(define-syntax makefile-rule-tmpvars
|
|
||||||
(syntax-rules ()
|
|
||||||
((makefile-rule-tmpvars (tmp1 ...) ?target () ?thunk)
|
|
||||||
;;
|
|
||||||
;; ?target could be an expr: eval only once
|
|
||||||
;;
|
|
||||||
(let ((target ?target))
|
|
||||||
(*fname->rule*-add! target
|
|
||||||
(make-rule (list (*fname->rule*-get tmp1)
|
|
||||||
...)
|
|
||||||
(make-is-out-of-date? target tmp1 ...)
|
|
||||||
(lambda ?args (?thunk))))))
|
|
||||||
;;
|
|
||||||
;; recursively construct temporary, hygienic variables
|
|
||||||
;;
|
|
||||||
((makefile-rule-tmpvars (tmp1 ...) ?target (?prereq0 ?prereq1 ...) ?thunk)
|
|
||||||
(let ((tmp2 ?prereq0))
|
|
||||||
(makefile-rule-tmpvars (tmp1 ... tmp2) ?target (?prereq1 ...) ?thunk)))))
|
|
||||||
|
|
||||||
(define-syntax makefile-rule-md5
|
|
||||||
(syntax-rules ()
|
|
||||||
((makefile-rule-md5 ?fingerprint ?target (?prereq0 ...) ?thunk)
|
|
||||||
(makefile-rule-md5-tmpvars () ?fingerprint ?target (?prereq0 ...) ?thunk))))
|
|
||||||
|
|
||||||
(define-syntax makefile-rule-md5-tmpvars
|
|
||||||
(syntax-rules ()
|
|
||||||
((makefile-rule-md5-tmpvars (tmp1 ...) ?fingerprint ?target () ?thunk)
|
|
||||||
;;
|
|
||||||
;; ?target could be an expr: eval only once
|
|
||||||
;;
|
|
||||||
(let ((target ?target))
|
|
||||||
(*fname->rule*-add! target
|
|
||||||
(make-rule (list (*fname->rule*-get tmp1)
|
|
||||||
...)
|
|
||||||
(make-has-md5-digest=? ?fingerprint
|
|
||||||
target
|
|
||||||
tmp1 ...)
|
|
||||||
(lambda ?args (?thunk))))))
|
|
||||||
;;
|
|
||||||
;; recursively construct temporary, hygienic variables
|
|
||||||
;;
|
|
||||||
((makefile-rule-md5-tmpvars (tmp1 ...)
|
|
||||||
?fingerprint
|
|
||||||
?target
|
|
||||||
(?prereq0 ?prereq1 ...)
|
|
||||||
?thunk)
|
|
||||||
(let ((tmp2 ?prereq0))
|
|
||||||
(makefile-rule-md5-tmpvars (tmp1 ... tmp2)
|
|
||||||
?fingerprint
|
|
||||||
?target
|
|
||||||
(?prereq1 ...)
|
|
||||||
?thunk)))))
|
|
Loading…
Reference in New Issue