(zilch lang ninja): Support rewriting derivation inputs
This lets incremental Ninja builds depend on other incremental Ninja builds. Change-Id: I6a6a6964ef300cae2e180970048c8a4881c88e19
This commit is contained in:
parent
c1c606ee0b
commit
0023f3def8
4 changed files with 267 additions and 39 deletions
|
|
@ -58,24 +58,29 @@
|
|||
(when (and (ninja-build-config-depfile-path config) (file-exists? (ninja-build-config-depfile-path config)))
|
||||
(set-ninja-build-config-depfile! config (alist->mapping (make-default-comparator) (call-with-input-file (ninja-build-config-depfile-path config) read))))
|
||||
|
||||
(define (export-depfiles finalized-drv)
|
||||
(define config (finalized-drv-config finalized-drv))
|
||||
(when (ninja-build-config-depfile-path config)
|
||||
(call-with-output-file (ninja-build-config-depfile-path config) (lambda (p) (write (mapping->alist (finalized-drv-depfile finalized-drv)) p))))
|
||||
(for-each (lambda (v) (export-depfiles (force (drv-rewrite-finalized-drv v)))) (finalized-drv-rewritten-drvs finalized-drv)))
|
||||
|
||||
(cond
|
||||
((string=? (car args) "source")
|
||||
(let*-values
|
||||
(((_ configured-drv _ _ _ _) (setup-ninja-environment config))
|
||||
(((_ configured-drv _ _ _ _ _) (setup-ninja-environment config '()))
|
||||
((realised) (store-path-realised configured-drv))
|
||||
((path) (if (null? (cdr args)) "src" (cadr args))))
|
||||
(system* (string-append "cp -rf --no-preserve=ownership " realised "/src " (qs path)))
|
||||
(system* (string-append "chmod -R u+rw " (qs path)))))
|
||||
((string=? (car args) "build")
|
||||
(if (null? (cdr args))
|
||||
(let-values (((built export-depfile) (build-nixpkgs-drv-reproducibly config)))
|
||||
(let ((output (build-nixpkgs-drv-reproducibly config)))
|
||||
(for-each
|
||||
(lambda (output-and-path)
|
||||
(store-path-realised (cdr output-and-path))
|
||||
(printf "~A\t-> ~S\n" (car output-and-path) (cdr output-and-path)))
|
||||
built)
|
||||
(when (ninja-build-config-depfile-path config)
|
||||
(call-with-output-file (ninja-build-config-depfile-path config) (lambda (p) (write (mapping->alist (export-depfile)) p)))))
|
||||
(finalized-drv-output-store-paths output))
|
||||
(export-depfiles output))
|
||||
(let-values (((_ _ _ edge-ref defaults _) (setup-ninja-environment config)))
|
||||
(for-each
|
||||
(lambda (target)
|
||||
|
|
@ -84,7 +89,7 @@
|
|||
(cdr args)))))
|
||||
((string=? (car args) "diff")
|
||||
(let*-values
|
||||
(((_ configured-drv _ _ _ _) (setup-ninja-environment config))
|
||||
(((_ configured-drv _ _ _ _ _) (setup-ninja-environment config '()))
|
||||
((realised) (store-path-realised configured-drv))
|
||||
((path) (or source "src")))
|
||||
(process-execute "git" (list "diff" "--no-index" "--" (string-append realised "/src") path))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue