embedded some commands for use with make into scsh
This commit is contained in:
parent
0205ebfd6a
commit
554749cd20
102
macros.scm
102
macros.scm
|
@ -35,13 +35,11 @@
|
|||
(?prereq-pattern0 ...)
|
||||
?action0 ...))
|
||||
(lambda (maybe-target)
|
||||
(let ((target-rx ?target-rx))
|
||||
(common-clause->func maybe-target
|
||||
target-rx
|
||||
pred
|
||||
(?out-of-date?-func ?target-rx
|
||||
(?prereq-pattern0 ...)
|
||||
?action0 ...)))))))
|
||||
(let ((target-rx ?target-rx)
|
||||
(thunk (lambda () ?action0 ...))
|
||||
(prereqs (list ?prereq-pattern0 ...)))
|
||||
(common->func maybe-target target-rx pred
|
||||
?out-of-date?-func ?target-rx prereqs thunk))))))
|
||||
|
||||
(define-syntax common-%-clause->func
|
||||
(syntax-rules ()
|
||||
|
@ -50,91 +48,11 @@
|
|||
(?prereq-pattern0 ...)
|
||||
?action0 ...))
|
||||
(lambda (maybe-target)
|
||||
(let* ((pattern ?target-pattern)
|
||||
(left (common-%-pattern->match pattern 1))
|
||||
(middle (common-%-pattern->match pattern 2))
|
||||
(right (common-%-pattern->match pattern 3))
|
||||
(target-rx (if (string=? "%" middle)
|
||||
(rx (: (submatch (: bos ,left))
|
||||
(submatch (* any))
|
||||
(submatch (: ,right eos))))
|
||||
(rx (: (submatch (: bos ,left))
|
||||
(submatch ,middle)
|
||||
(submatch (: ,right eos)))))))
|
||||
(common-clause->func maybe-target
|
||||
target-rx
|
||||
pred
|
||||
(?out-of-date?-func ?target-pattern
|
||||
(?prereq-pattern0 ...)
|
||||
?action0 ...)))))))
|
||||
|
||||
(define-syntax common-%-pattern->match
|
||||
(syntax-rules ()
|
||||
((common-%-pattern->match ?target-pattern ?no)
|
||||
(match:substring (regexp-search (rx (: (submatch (: bos (* any)))
|
||||
(submatch "%")
|
||||
(submatch (: (* any) eos))))
|
||||
?target-pattern)
|
||||
?no))))
|
||||
|
||||
(define-syntax common-s/%/match
|
||||
(syntax-rules ()
|
||||
((common-s/%/match ?pattern ?match)
|
||||
(regexp-substitute/global
|
||||
#f (rx (: (submatch (: bos (* any)))
|
||||
(submatch "%")
|
||||
(submatch (: (* any) eos)))) ?pattern 'pre 1 ?match 3 'post))))
|
||||
|
||||
(define-syntax common-clause->func
|
||||
(syntax-rules ()
|
||||
((common-clause->func maybe-target
|
||||
target-rx
|
||||
pred
|
||||
(?out-of-date?-func ?target-pattern
|
||||
(?prereq-pattern0 ...)
|
||||
?action0 ...))
|
||||
(let* ((match-data (regexp-search target-rx maybe-target))
|
||||
(maybe-target-matches (if match-data
|
||||
(map (lambda (no)
|
||||
(match:substring match-data no))
|
||||
(list 1 2 3))
|
||||
#f)))
|
||||
(if maybe-target-matches
|
||||
(let* ((left (list-ref maybe-target-matches 0))
|
||||
(target-match (list-ref maybe-target-matches 1))
|
||||
(right (list-ref maybe-target-matches 2))
|
||||
(target-name (string-append left target-match right))
|
||||
(prereqs (list ?prereq-pattern0 ...))
|
||||
(cooked-prereqs (map (lambda (prereq)
|
||||
(if (string? prereq)
|
||||
(common-s/%/match prereq target-match)
|
||||
prereq))
|
||||
prereqs)))
|
||||
(make-rule-cand target-name
|
||||
cooked-prereqs
|
||||
;;out-to-date?-func
|
||||
(lambda args
|
||||
(let ((init-state (last args)))
|
||||
(cons (bind-fluids-common
|
||||
target-name left target-match right
|
||||
(lambda ()
|
||||
(?out-of-date?-func target-name
|
||||
cooked-prereqs)))
|
||||
init-state)))
|
||||
;; build-func
|
||||
(lambda args
|
||||
(let ((cooked-state (last args))
|
||||
(prereqs-results (cdr (reverse (cdr args)))))
|
||||
(cons (bind-fluids-common
|
||||
target-name left target-match right
|
||||
(lambda ()
|
||||
(bind-all-fluids target-name
|
||||
cooked-prereqs
|
||||
prereqs-results
|
||||
(lambda ()
|
||||
?action0 ...))))
|
||||
cooked-state)))))
|
||||
#f)))))
|
||||
(let ((target-rx (%-pattern->rx ?target-pattern))
|
||||
(thunk (lambda () ?action0 ...))
|
||||
(prereqs (list ?prereq-pattern0 ...)))
|
||||
(common->func maybe-target target-rx pred
|
||||
?out-of-date?-func ?target-pattern prereqs thunk))))))
|
||||
|
||||
(define-syntax clause->rc
|
||||
(syntax-rules ()
|
||||
|
|
163
make.scm
163
make.scm
|
@ -8,3 +8,166 @@
|
|||
(map (lambda (t)
|
||||
(rule-make t init-state rule-set))
|
||||
target-rules))))
|
||||
|
||||
(define (make-rc target prereqs out-of-date?-func thunk)
|
||||
(make-rule-cand target
|
||||
prereqs
|
||||
(lambda args
|
||||
(let ((init-state (last args)))
|
||||
(cons (out-of-date?-func target prereqs)
|
||||
init-state)))
|
||||
(lambda args
|
||||
(let ((cooked-state (last args))
|
||||
(results (cdr (reverse (cdr args)))))
|
||||
(cons (bind-all-fluids target prereqs results thunk)
|
||||
cooked-state)))))
|
||||
|
||||
(define (file->rc target prereqs thunk)
|
||||
(make-rc target prereqs file thunk))
|
||||
|
||||
(define (once->rc target prereqs thunk)
|
||||
(make-rc target prereqs once thunk))
|
||||
|
||||
(define (all->rc target prereqs thunk)
|
||||
(make-rc target prereqs all thunk))
|
||||
|
||||
(define (always->rc target prereqs thunk)
|
||||
(make-rc target prereqs always thunk))
|
||||
|
||||
(define (perms->rc target prereqs thunk)
|
||||
(make-rc target prereqs perms thunk))
|
||||
|
||||
(define (md5->rc target prereqs thunk)
|
||||
(make-rc target prereqs md5 thunk))
|
||||
|
||||
(define (md5-perms->rc target prereqs thunk)
|
||||
(make-rc target prereqs md5-perms thunk))
|
||||
|
||||
(define (paranoid->rc target prereqs thunk)
|
||||
(make-rc target prereqs paranoid thunk))
|
||||
|
||||
(define (subst-% pattern match)
|
||||
(regexp-substitute/global #f (rx (: (submatch (: bos (* any)))
|
||||
(submatch "%")
|
||||
(submatch (: (* any) eos))))
|
||||
pattern 'pre 1 match 3 'post))
|
||||
|
||||
(define (%-pattern->match pattern no)
|
||||
(match:substring (regexp-search (rx (: (submatch (: bos (* any)))
|
||||
(submatch "%")
|
||||
(submatch (: (* any) eos))))
|
||||
pattern)
|
||||
no))
|
||||
|
||||
(define (%-pattern->rx pattern)
|
||||
(let* ((left (%-pattern->match pattern 1))
|
||||
(middle (%-pattern->match pattern 2))
|
||||
(right (%-pattern->match pattern 3))
|
||||
(target-rx (if (string=? "%" middle)
|
||||
(rx (: (submatch (: bos ,left))
|
||||
(submatch (* any))
|
||||
(submatch (: ,right eos))))
|
||||
(rx (: (submatch (: bos ,left))
|
||||
(submatch ,middle)
|
||||
(submatch (: ,right eos)))))))
|
||||
target-rx))
|
||||
|
||||
(define (file-rx->rc target prereqs thunk)
|
||||
(rx->func string=? target prereqs file thunk))
|
||||
|
||||
(define (once-rx->rc target prereqs thunk)
|
||||
(rx->func string=? target prereqs once thunk))
|
||||
|
||||
(define (all-rx->rc target prereqs thunk)
|
||||
(rx->func string=? target prereqs all thunk))
|
||||
|
||||
(define (always-rx->rc target prereqs thunk)
|
||||
(rx->func string=? target prereqs always thunk))
|
||||
|
||||
(define (perms-rx->rc target prereqs thunk)
|
||||
(rx->func string=? target prereqs perms thunk))
|
||||
|
||||
(define (md5-rx->rc target prereqs thunk)
|
||||
(rx->func string=? target prereqs md5 thunk))
|
||||
|
||||
(define (md5-perms-rx->rc target prereqs thunk)
|
||||
(rx->func string=? target prereqs md5-perms thunk))
|
||||
|
||||
(define (paranoid-rx->rc target prereqs thunk)
|
||||
(rx->func string=? target prereqs paranoid thunk))
|
||||
|
||||
(define (rx->func pred target-rx prereqs out-of-date?-func thunk)
|
||||
(lambda (maybe-target)
|
||||
(common->func maybe-target target-rx pred
|
||||
out-of-date?-func target-rx prereqs thunk)))
|
||||
|
||||
(define (file-%->rc target prereqs thunk)
|
||||
(%->func string=? target prereqs file thunk))
|
||||
|
||||
(define (once-%->rc target prereqs thunk)
|
||||
(%->func string=? target prereqs once thunk))
|
||||
|
||||
(define (all-%->rc target prereqs thunk)
|
||||
(%->func string=? target prereqs all thunk))
|
||||
|
||||
(define (always-%->rc target prereqs thunk)
|
||||
(%->func string=? target prereqs always thunk))
|
||||
|
||||
(define (perms-%->rc target prereqs thunk)
|
||||
(%->func string=? target prereqs perms thunk))
|
||||
|
||||
(define (md5-%->rc target prereqs thunk)
|
||||
(%->func string=? target prereqs md5 thunk))
|
||||
|
||||
(define (md5-perms-%->rc target prereqs thunk)
|
||||
(%->func string=? target prereqs md5-perms thunk))
|
||||
|
||||
(define (paranoid-%->rc target prereqs thunk)
|
||||
(%->func string=? target prereqs paranoid thunk))
|
||||
|
||||
(define (%->func pred target-pattern prereqs out-of-date?-func thunk)
|
||||
(lambda (maybe-target)
|
||||
(let ((target-rx (%-pattern->rx target-pattern)))
|
||||
(common->func maybe-target target-rx pred
|
||||
out-of-date?-func target-pattern prereqs thunk))))
|
||||
|
||||
(define (common->func maybe-target target-rx pred
|
||||
out-of-date?-func target-pattern prereqs thunk)
|
||||
(let* ((match-data (regexp-search target-rx maybe-target))
|
||||
(maybe-target-matches (if match-data
|
||||
(map (lambda (no)
|
||||
(match:substring match-data no))
|
||||
(list 1 2 3))
|
||||
#f)))
|
||||
(if maybe-target-matches
|
||||
(let* ((left (list-ref maybe-target-matches 0))
|
||||
(target-match (list-ref maybe-target-matches 1))
|
||||
(right (list-ref maybe-target-matches 2))
|
||||
(target-name (string-append left target-match right))
|
||||
(cooked-prereqs (map (lambda (prereq)
|
||||
(if (string? prereq)
|
||||
(subst-% prereq target-match)
|
||||
prereq))
|
||||
prereqs)))
|
||||
(make-rule-cand target-name
|
||||
cooked-prereqs
|
||||
(lambda args
|
||||
(let ((init-state (last args)))
|
||||
(cons (bind-fluids-common
|
||||
target-name left target-match right
|
||||
(lambda ()
|
||||
(out-of-date?-func target-name
|
||||
cooked-prereqs)))
|
||||
init-state)))
|
||||
(lambda args
|
||||
(let ((cooked-state (last args))
|
||||
(prereqs-results (cdr (reverse (cdr args)))))
|
||||
(cons (bind-fluids-common
|
||||
target-name left target-match right
|
||||
(lambda ()
|
||||
(bind-all-fluids target-name
|
||||
cooked-prereqs
|
||||
prereqs-results
|
||||
thunk)))
|
||||
cooked-state)))))
|
||||
#f)))
|
||||
|
|
44
packages.scm
44
packages.scm
|
@ -182,10 +182,8 @@
|
|||
srfi-1
|
||||
to-rule-set
|
||||
rule-cand
|
||||
dfs
|
||||
autovars
|
||||
templates
|
||||
make-rule)
|
||||
make)
|
||||
(files macros))
|
||||
|
||||
(define-interface to-rule-set-interface
|
||||
|
@ -328,12 +326,48 @@
|
|||
srfi-9)
|
||||
(files rule-cand))
|
||||
|
||||
(define-structure make (export make)
|
||||
(define-interface make-interface
|
||||
(export make
|
||||
make-rc
|
||||
file->rc
|
||||
once->rc
|
||||
all->rc
|
||||
always->rc
|
||||
perms->rc
|
||||
md5->rc
|
||||
md5-perms->rc
|
||||
paranoid->rc
|
||||
%-pattern->match
|
||||
%-pattern->rx
|
||||
file-rx->rc
|
||||
once-rx->rc
|
||||
all-rx->rc
|
||||
always-rx->rc
|
||||
perms-rx->rc
|
||||
md5-rx->rc
|
||||
md5-perms-rx->rc
|
||||
paranoid-rx->rc
|
||||
file-%->rc
|
||||
once-%->rc
|
||||
all-%->rc
|
||||
always-%->rc
|
||||
perms-%->rc
|
||||
md5-%->rc
|
||||
md5-perms-%->rc
|
||||
paranoid-%->rc
|
||||
%->func
|
||||
rx->func
|
||||
common->func))
|
||||
|
||||
(define-structure make make-interface
|
||||
(open scheme-with-scsh
|
||||
srfi-1
|
||||
macros
|
||||
; macros
|
||||
let-opt
|
||||
to-rule-set
|
||||
templates
|
||||
autovars
|
||||
rule-cand
|
||||
make-rule)
|
||||
(files make))
|
||||
|
||||
|
|
Loading…
Reference in New Issue