From 275b56622deb305a97165f5d84da0ed9df49a7d2 Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Sun, 11 May 2025 22:21:07 +0000 Subject: [PATCH] (zilch lang ninja): Support overriding source used for build Change-Id: I6a6a696488f85192dbd911df3d2d28fee01f7b5b --- lang/ninja/src/config.sld | 14 ++++++++++---- lang/ninja/src/nixpkgs.sld | 14 +++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lang/ninja/src/config.sld b/lang/ninja/src/config.sld index 378cea0..811dc69 100644 --- a/lang/ninja/src/config.sld +++ b/lang/ninja/src/config.sld @@ -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 - (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)))) diff --git a/lang/ninja/src/nixpkgs.sld b/lang/ninja/src/nixpkgs.sld index bd3e97b..425c51b 100644 --- a/lang/ninja/src/nixpkgs.sld +++ b/lang/ninja/src/nixpkgs.sld @@ -6,7 +6,7 @@ (zilch magic) (zilch nixpkgs) (zilch vfs) (zilch nix drv) (zilch zexpr) - (srfi 132) (srfi 152)) + (srfi 132) (srfi 146) (srfi 152)) (export setup-ninja-environment @@ -98,6 +98,18 @@ ; This VFS contains two directories: `src` (source tree) and `build` (Ninja build files). (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)