makefile.scm: (expand-file-name ...) works now due to s,assq,assoc, in

macros.scm and rule-trans-set.scm

rule-trans-set.scm: known-rules-update is now really ugly! (but working)
		    will be replaced with topological sort

		    known-rules-update now loops until there are no
		    further changes in the rule-candidates-list (each
		    time). this should really make it work now.

makros.scm replaced with macros.scm

macros.scm: in make-is-out-of-date? there was no check for
            file-existence of each prereq
This commit is contained in:
jottbee 2005-01-20 10:18:07 +00:00
parent 5277066db6
commit 2ee328949e
4 changed files with 102 additions and 104 deletions

View File

@ -10,31 +10,35 @@
(syntax-rules () (syntax-rules ()
((make ?rule-trans-set (?target-fname0 ...) ?init-state) ((make ?rule-trans-set (?target-fname0 ...) ?init-state)
;; ;;
;; ?rule-trans-set could be an expr: eval only once ;; ?rule-trans-set or ?target-fname0 could be an expr: eval only once
;; ;;
(let ((rule-trans-set ?rule-trans-set)) (let ((rule-trans-set ?rule-trans-set))
(let ((target-rule (known-rules-get rule-trans-set ?target-fname0))) (let* ((target-fname0 ?target-fname0)
(target-rule (known-rules-get rule-trans-set target-fname0)))
(if (not (null? (rule-trans-set-rule-candidates rule-trans-set)))
(display "rule-candidates not empty.\n"))
(if target-rule (if target-rule
(rule-make target-rule (rule-make target-rule
?init-state ?init-state
(rule-trans-set-rule-set rule-trans-set)) (rule-trans-set-rule-set rule-trans-set))
(error "target-rule not found in rule-set."))) (error "target-rule not found in rule-set.")))
...)) ...))
((_ ) (error "usage: (make '#{:rule-trans-set} (target0 ...) init-state)\n")))) ((_ )
(error "usage: (make '#{:rule-trans-set} (target0 ...) init-state)\n"))))
(define-syntax makefile
(syntax-rules ()
((makefile ?rule0 ...)
(let ((rule-trans-set (make-empty-rule-trans-set)))
(let* ((rule-trans-set (?rule0 rule-trans-set))
...)
rule-trans-set)))))
;;; (define-syntax makefile ;;; (define-syntax makefile
;;; (syntax-rules () ;;; (syntax-rules ()
;;; ((makefile) (make-empty-rule-trans-set)) ;;; ((makefile ?rule0 ...)
;;; ((makefile ?rule0 ?rule1 ...) ;;; (let ((rule-trans-set (make-empty-rule-trans-set)))
;;; (?rule0 (makefile ?rule1 ...))))) ;;; (let* ((rule-trans-set (?rule0 rule-trans-set))
;;; ...)
;;; rule-trans-set)))))
(define-syntax makefile
(syntax-rules ()
((makefile) (make-empty-rule-trans-set))
((makefile ?rule0 ?rule1 ...)
(?rule0 (makefile ?rule1 ...)))))
(define-syntax makefile-rule (define-syntax makefile-rule
(syntax-rules () (syntax-rules ()
@ -97,11 +101,12 @@
(cons (file-not-exists? ?target) ?args))) (cons (file-not-exists? ?target) ?args)))
((make-is-out-of-date? ?target ?prereq0 ...) ((make-is-out-of-date? ?target ?prereq0 ...)
(lambda ?args (lambda ?args
(cons (or (file-not-exists? ?target) (cons (and (file-exists? ?prereq0) ...
(> (file-last-mod ?prereq0) (or (file-not-exists? ?target)
(file-last-mod ?target)) (> (file-last-mod ?prereq0)
...) (file-last-mod ?target)))
(last ?args)))))) ...)
(last ?args))))))
(define-syntax make-is-out-of-date! (define-syntax make-is-out-of-date!
(syntax-rules () (syntax-rules ()

View File

@ -1,48 +1,46 @@
;;; (define work-dir (expand-file-name "~/.tmp")) (define scsh-doc-dir (expand-file-name "~/src/scsh-0.6.6/doc/scsh-manual"))
;;; (define work-dir scsh-doc-dir)
;;; (make
;;; (makefile (define tex-file (expand-file-name "test.tex" scsh-doc-dir))
;;; (makefile-rule (expand-file-name "skills.tex" work-dir) (define dvi-file (expand-file-name "test.dvi" scsh-doc-dir))
;;; () (define pdf-file (expand-file-name "test.pdf" scsh-doc-dir))
;;; (lambda ()
;;; (with-cwd work-dir (display "Top: skills.tex"))))
;;; (makefile-rule (expand-file-name "skills.dvi" work-dir)
;;; ((expand-file-name "skills.tex" work-dir))
;;; (lambda ()
;;; (with-cwd
;;; work-dir
;;; (run (latex ,(expand-file-name "skills.tex" work-dir))))))
;;; (makefile-rule (expand-file-name "skills.pdf" work-dir)
;;; ((expand-file-name "skills.dvi" work-dir))
;;; (lambda ()
;;; (with-cwd
;;; work-dir
;;; (run
;;; (dvipdfm -o
;;; ,(expand-file-name "skills.pdf" work-dir)
;;; ,(expand-file-name "skills.dvi" work-dir)))))))
;;; ((expand-file-name "skills.pdf" work-dir))
;;; "this is an empty init-state")
(make (make
(makefile (makefile
(makefile-rule "/home/bruegman/.tmp/skills.tex" (makefile-rule tex-file
() ()
(lambda () (lambda ()
(with-cwd "/home/bruegman/.tmp" (with-cwd work-dir (display "Top: skills.tex"))))
(display "Top: /home/bruegman/.tmp/skills.tex")))) (makefile-rule pdf-file
(makefile-rule "/home/bruegman/.tmp/skills.dvi" (dvi-file)
("/home/bruegman/.tmp/skills.tex") (lambda ()
(lambda () (with-cwd work-dir (run (dvipdfm -o ,pdf-file ,dvi-file)))))
(with-cwd "/home/bruegman/.tmp" (makefile-rule dvi-file
(run (latex ,"/home/bruegman/.tmp/skills.tex"))))) (tex-file)
(makefile-rule "/home/bruegman/.tmp/skills.pdf" (lambda ()
("/home/bruegman/.tmp/skills.dvi") (with-cwd work-dir (run (latex ,tex-file))))))
(lambda () (pdf-file)
(with-cwd "/home/bruegman/.tmp" "this is an empty init-state")
(run (dvipdfm -o ,"/home/bruegman/.tmp/skills.pdf"
,"/home/bruegman/.tmp/skills.dvi")))))) ;;; (make
("/home/bruegman/.tmp/skills.pdf" ;;; (makefile
"/home/bruegman/.tmp/skills.dvi" ;;; (makefile-rule "/home/johannes/.tmp/skills.tex"
"/home/bruegman/.tmp/skills.tex") ;;; ()
"this is an empty init-state...") ;;; (lambda ()
;;; (with-cwd "/home/johannes/.tmp"
;;; (display "Top: /home/johannes/.tmp/skills.tex"))))
;;; (makefile-rule "/home/johannes/.tmp/skills.dvi"
;;; ("/home/johannes/.tmp/skills.tex")
;;; (lambda ()
;;; (with-cwd "/home/johannes/.tmp"
;;; (run (latex ,"/home/johannes/.tmp/skills.tex")))))
;;; (makefile-rule "/home/johannes/.tmp/skills.pdf"
;;; ("/home/johannes/.tmp/skills.dvi")
;;; (lambda ()
;;; (with-cwd "/home/johannes/.tmp"
;;; (run (dvipdfm -o ,"/home/johannes/.tmp/skills.pdf"
;;; ,"/home/johannes/.tmp/skills.dvi"))))))
;;; ("/home/johannes/.tmp/skills.pdf"
;;; "/home/johannes/.tmp/skills.dvi"
;;; "/home/johannes/.tmp/skills.tex")
;;; "this is an empty init-state...")

View File

@ -169,18 +169,6 @@
srfi-9) srfi-9)
(files make-rule-no-cml)) (files make-rule-no-cml))
(define-interface makros-interface
(export (make-is-out-of-date? :syntax)
(makefile :syntax)
(makefile-rule :syntax)
(make :syntax)))
(define-structure makros makros-interface
(open scheme-with-scsh
srfi-1
make-rule-no-cml)
(files makros))
(define-interface rule-trans-set-interface (define-interface rule-trans-set-interface
(export make-rule-trans-set (export make-rule-trans-set
is-rule-trans-set? is-rule-trans-set?

View File

@ -86,35 +86,42 @@
(define (known-rules-get rule-trans-set target) (define (known-rules-get rule-trans-set target)
(let* ((known-rules (rule-trans-set-known-rules rule-trans-set)) (let* ((known-rules (rule-trans-set-known-rules rule-trans-set))
(maybe-rule (assq target known-rules))) (maybe-rule (assoc target known-rules)))
(if maybe-rule (cdr maybe-rule) maybe-rule))) (if maybe-rule (cdr maybe-rule) maybe-rule)))
(define (known-rules-update rule-trans-set) (define (known-rules-update rts)
(let* ((rule-candidates (rule-trans-set-rule-candidates rule-trans-set)) (let until-no-change ((last-rcs (length (rule-trans-set-rule-candidates rts)))
(candidate-descs (map cons (map car rule-candidates) (rule-trans-set rts))
(map cdr rule-candidates)))) (let* ((rule-candidates (rule-trans-set-rule-candidates rule-trans-set))
(let for-candidates ((current-candidate-desc (car candidate-descs)) (candidate-descs (map cons (map car rule-candidates)
(to-do-candidate-desc (cdr candidate-descs)) (map cdr rule-candidates))))
(current-rts rule-trans-set)) (let for-candidates ((current-candidate-desc (car candidate-descs))
(let ((target (list-ref current-candidate-desc 0)) (to-do-candidate-desc (cdr candidate-descs))
(prereqs (list-ref current-candidate-desc 1)) (current-rts rule-trans-set))
(wants-build? (list-ref current-candidate-desc 2)) (let ((target (list-ref current-candidate-desc 0))
(build-func (list-ref current-candidate-desc 3))) (prereqs (list-ref current-candidate-desc 1))
(let* ((known-rules (rule-trans-set-known-rules current-rts)) (wants-build? (list-ref current-candidate-desc 2))
(new-rts (if (not (memq #f (map (lambda (prereq) (build-func (list-ref current-candidate-desc 3)))
(assq prereq known-rules)) (let* ((known-rules (rule-trans-set-known-rules current-rts))
prereqs))) (new-rts (if (not (memq #f
(known-rules-add (rule-candidate-del current-rts target) (map (lambda (prereq)
target (assoc prereq known-rules))
prereqs prereqs)))
wants-build? (known-rules-add (rule-candidate-del
build-func) current-rts
current-rts))) target)
(if (not (null? to-do-candidate-desc)) target prereqs
(for-candidates (car to-do-candidate-desc) wants-build? build-func)
(cdr to-do-candidate-desc) current-rts)))
new-rts) (if (not (null? to-do-candidate-desc))
new-rts)))))) (for-candidates (car to-do-candidate-desc)
(cdr to-do-candidate-desc)
new-rts)
(let ((current-rcs (length (rule-trans-set-rule-candidates
new-rts))))
(if (or (= current-rcs last-rcs) (= current-rcs 0))
new-rts
(until-no-change current-rcs new-rts))))))))))
;;; look for all rule-candidates that can be added to known-rules ;;; look for all rule-candidates that can be added to known-rules
;;; and add them to known-rules ;;; and add them to known-rules