fixed pattern problem:

now, a normal rule can be inside common-%. this will work:
    (common-% "foo" ("%.c") (run (gcc -o ,($@) ,($<))))

added head->rc/-%/-rx, tail->rc/-%/-rx
This commit is contained in:
jottbee 2005-04-11 19:57:15 +00:00
parent b161de726d
commit 4198c5e46a
1 changed files with 25 additions and 5 deletions

View File

@ -25,6 +25,12 @@
(define (file->rc target prereqs thunk) (define (file->rc target prereqs thunk)
(make-rc target prereqs file thunk)) (make-rc target prereqs file thunk))
(define (head->rc target prereqs thunk)
(make-rc target prereqs head thunk))
(define (tail->rc target prereqs thunk)
(make-rc target prereqs tail thunk))
(define (once->rc target prereqs thunk) (define (once->rc target prereqs thunk)
(make-rc target prereqs once thunk)) (make-rc target prereqs once thunk))
@ -53,11 +59,13 @@
pattern 'pre 1 match 3 'post)) pattern 'pre 1 match 3 'post))
(define (%-pattern->match pattern no) (define (%-pattern->match pattern no)
(match:substring (regexp-search (rx (: (submatch (: bos (* any))) (let ((re (rx (: (submatch (: bos (* any)))
(submatch "%") (submatch "%")
(submatch (: (* any) eos)))) (submatch (: (* any) eos)))))
pattern) (found-%? (regexp-search (rx (: "%")) pattern)))
no)) (if found-%?
(match:substring (regexp-search re pattern) no)
(if (= no 2) pattern ""))))
(define (%-pattern->rx pattern) (define (%-pattern->rx pattern)
(let* ((left (%-pattern->match pattern 1)) (let* ((left (%-pattern->match pattern 1))
@ -75,6 +83,12 @@
(define (file-rx target prereqs thunk) (define (file-rx target prereqs thunk)
(rx->func string=? target prereqs file thunk)) (rx->func string=? target prereqs file thunk))
(define (head-rx target prereqs thunk)
(rx->func string=? target prereqs head thunk))
(define (tail-rx target prereqs thunk)
(rx->func string=? target prereqs tail thunk))
(define (once-rx target prereqs thunk) (define (once-rx target prereqs thunk)
(rx->func string=? target prereqs once thunk)) (rx->func string=? target prereqs once thunk))
@ -104,6 +118,12 @@
(define (file-% target prereqs thunk) (define (file-% target prereqs thunk)
(%->func string=? target prereqs file thunk)) (%->func string=? target prereqs file thunk))
(define (head-% target prereqs thunk)
(%->func string=? target prereqs head thunk))
(define (tail-% target prereqs thunk)
(%->func string=? target prereqs tail thunk))
(define (once-% target prereqs thunk) (define (once-% target prereqs thunk)
(%->func string=? target prereqs once thunk)) (%->func string=? target prereqs once thunk))