(zilch lang ninja): Support overriding source used for build

Change-Id: I6a6a696488f85192dbd911df3d2d28fee01f7b5b
This commit is contained in:
puck 2025-05-11 22:21:07 +00:00
parent 5d4fb382a8
commit 275b56622d
2 changed files with 23 additions and 5 deletions

View file

@ -2,12 +2,14 @@
(import
(scheme base) (scheme eval)
(zilch magic) (zilch nixpkgs) (zilch vfs)
(srfi 88)
(prefix (only scheme eval) scheme-))
(export
ninja-build-config?
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-override-source
set-ninja-build-config-root-dir! set-ninja-build-config-environment!
@ -15,13 +17,14 @@
(begin
(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?
(environment ninja-build-config-environment set-ninja-build-config-environment!)
(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!)
(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)
(cond
@ -39,6 +42,9 @@
((#: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)))
(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)
(let*
((patch-base (list-ref data 1))
@ -59,9 +65,9 @@
(list-val (if (list? val) val (list val))))
(set-ninja-build-config-targets! conf (append list-val (ninja-build-config-targets conf))))
(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)
(unless (list? config)
(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))))