(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 (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))))

View file

@ -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)