(zilch lang ninja): Support overriding source used for build
Change-Id: I6a6a696488f85192dbd911df3d2d28fee01f7b5b
This commit is contained in:
parent
5d4fb382a8
commit
275b56622d
2 changed files with 23 additions and 5 deletions
|
|
@ -2,12 +2,14 @@
|
||||||
(import
|
(import
|
||||||
(scheme base) (scheme eval)
|
(scheme base) (scheme eval)
|
||||||
(zilch magic) (zilch nixpkgs) (zilch vfs)
|
(zilch magic) (zilch nixpkgs) (zilch vfs)
|
||||||
|
(srfi 88)
|
||||||
(prefix (only scheme eval) scheme-))
|
(prefix (only scheme eval) scheme-))
|
||||||
|
|
||||||
(export
|
(export
|
||||||
ninja-build-config?
|
ninja-build-config?
|
||||||
ninja-build-config-environment ninja-build-config-environment-drv
|
ninja-build-config-environment ninja-build-config-environment-drv
|
||||||
ninja-build-config-root-dir ninja-build-config-patches ninja-build-config-targets
|
ninja-build-config-root-dir ninja-build-config-patches ninja-build-config-targets
|
||||||
|
ninja-build-config-override-source
|
||||||
|
|
||||||
set-ninja-build-config-root-dir! set-ninja-build-config-environment!
|
set-ninja-build-config-root-dir! set-ninja-build-config-environment!
|
||||||
|
|
||||||
|
|
@ -15,13 +17,14 @@
|
||||||
|
|
||||||
(begin
|
(begin
|
||||||
(define-record-type <ninja-build-config>
|
(define-record-type <ninja-build-config>
|
||||||
(make-ninja-build-config environment environment-drv root-dir patches targets)
|
(make-ninja-build-config environment environment-drv root-dir patches targets override-source)
|
||||||
ninja-build-config?
|
ninja-build-config?
|
||||||
(environment ninja-build-config-environment set-ninja-build-config-environment!)
|
(environment ninja-build-config-environment set-ninja-build-config-environment!)
|
||||||
(environment-drv ninja-build-config-environment-drv set-ninja-build-config-environment-drv!)
|
(environment-drv ninja-build-config-environment-drv set-ninja-build-config-environment-drv!)
|
||||||
(root-dir ninja-build-config-root-dir set-ninja-build-config-root-dir!)
|
(root-dir ninja-build-config-root-dir set-ninja-build-config-root-dir!)
|
||||||
(patches ninja-build-config-patches set-ninja-build-config-patches!)
|
(patches ninja-build-config-patches set-ninja-build-config-patches!)
|
||||||
(targets ninja-build-config-targets set-ninja-build-config-targets!))
|
(targets ninja-build-config-targets set-ninja-build-config-targets!)
|
||||||
|
(override-source ninja-build-config-override-source set-ninja-build-config-override-source!))
|
||||||
|
|
||||||
(define (parse-config-inner conf data)
|
(define (parse-config-inner conf data)
|
||||||
(cond
|
(cond
|
||||||
|
|
@ -39,6 +42,9 @@
|
||||||
((#:root)
|
((#:root)
|
||||||
(set-ninja-build-config-root-dir! conf (if (string? (list-ref data 1)) (vfs-from-directory (list-ref data 1)) (list-ref data 1)))
|
(set-ninja-build-config-root-dir! conf (if (string? (list-ref data 1)) (vfs-from-directory (list-ref data 1)) (list-ref data 1)))
|
||||||
(parse-config-inner conf (cddr data)))
|
(parse-config-inner conf (cddr data)))
|
||||||
|
((#:override-source)
|
||||||
|
(set-ninja-build-config-override-source! conf (if (string? (list-ref data 1)) (vfs-from-directory (list-ref data 1)) (list-ref data 1)))
|
||||||
|
(parse-config-inner conf (cddr data)))
|
||||||
((#:patch)
|
((#:patch)
|
||||||
(let*
|
(let*
|
||||||
((patch-base (list-ref data 1))
|
((patch-base (list-ref data 1))
|
||||||
|
|
@ -59,9 +65,9 @@
|
||||||
(list-val (if (list? val) val (list val))))
|
(list-val (if (list? val) val (list val))))
|
||||||
(set-ninja-build-config-targets! conf (append list-val (ninja-build-config-targets conf))))
|
(set-ninja-build-config-targets! conf (append list-val (ninja-build-config-targets conf))))
|
||||||
(parse-config-inner conf (cddr data)))
|
(parse-config-inner conf (cddr data)))
|
||||||
(else (error (string-append "Unknown directive " (symbol->string (car data)) " parsing Zilch Ninja config")))))))
|
(else (error (string-append "Unknown directive " (keyword->string (car data)) " parsing Zilch Ninja config")))))))
|
||||||
|
|
||||||
(define (parse-ninja-config config)
|
(define (parse-ninja-config config)
|
||||||
(unless (list? config)
|
(unless (list? config)
|
||||||
(error "expected Zilch Ninja config to be a list"))
|
(error "expected Zilch Ninja config to be a list"))
|
||||||
(parse-config-inner (make-ninja-build-config #f #f #f '() #f) config))))
|
(parse-config-inner (make-ninja-build-config #f #f #f '() #f #f) config))))
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
(zilch magic) (zilch nixpkgs) (zilch vfs)
|
(zilch magic) (zilch nixpkgs) (zilch vfs)
|
||||||
(zilch nix drv)
|
(zilch nix drv)
|
||||||
(zilch zexpr)
|
(zilch zexpr)
|
||||||
(srfi 132) (srfi 152))
|
(srfi 132) (srfi 146) (srfi 152))
|
||||||
|
|
||||||
(export
|
(export
|
||||||
setup-ninja-environment
|
setup-ninja-environment
|
||||||
|
|
@ -99,6 +99,18 @@
|
||||||
; This VFS contains two directories: `src` (source tree) and `build` (Ninja build files).
|
; This VFS contains two directories: `src` (source tree) and `build` (Ninja build files).
|
||||||
(define configured-vfs (vfs-from-store configured-drv))
|
(define configured-vfs (vfs-from-store configured-drv))
|
||||||
|
|
||||||
|
(when (ninja-build-config-override-source conf)
|
||||||
|
(let
|
||||||
|
((filtered (mapping-filter! (lambda (path val) (not (or (string=? "src" (car path)) (string-prefix? "src/" (car path))))) (vfs-contents configured-vfs))))
|
||||||
|
(mapping-for-each
|
||||||
|
(lambda (p v)
|
||||||
|
(set! filtered
|
||||||
|
(mapping-set! filtered
|
||||||
|
(cons (if (string=? (car p) "") "src" (string-append "src/" (car p))) (cdr p))
|
||||||
|
v)))
|
||||||
|
(vfs-contents (ninja-build-config-override-source conf)))
|
||||||
|
(set! configured-vfs (make-vfs filtered))))
|
||||||
|
|
||||||
(set-ninja-build-config-root-dir! conf configured-vfs)
|
(set-ninja-build-config-root-dir! conf configured-vfs)
|
||||||
|
|
||||||
(define (read-file-at-path path)
|
(define (read-file-at-path path)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue