From e42315e67a5a3622fb106eb50a4bcc3c7f805db5 Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Wed, 27 Nov 2024 17:32:13 +0000 Subject: [PATCH] (zilch lang rust): remove lack-of-vfs workarounds --- core/src/magic.sld | 23 ++++++++++++++++++++--- lang/rust/src/cargo.sld | 17 ++++------------- lang/rust/src/resolver.sld | 9 +++++---- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/core/src/magic.sld b/core/src/magic.sld index 730d2dc..6655264 100644 --- a/core/src/magic.sld +++ b/core/src/magic.sld @@ -185,21 +185,38 @@ (define context-to-build '()) (define drv-output-map #f) + (define placeholders-to-build '()) + + (define (check-output-needs-building output-name output drv) + (when (and (derivation-output-placeholder? output) (string-contains path (derivation-output-path output))) + (unless drv-output-map + (set! drv-output-map (daemon-wop-query-derivation-output-map (*daemon*) (derivation-path drv)))) + (let ((known-path (cdr (assoc output-name drv-output-map)))) + (unless known-path + (set! placeholders-to-build (cons (string-append (derivation-path drv) "!" output-name) placeholders-to-build)))))) (define (process-output output-name output drv) (define needs-building #f) (when (and (derivation-output-placeholder? output) (string-contains path (derivation-output-path output))) (unless drv-output-map (set! drv-output-map (daemon-wop-query-derivation-output-map (*daemon*) (derivation-path drv)))) - (unless (assoc output-name drv-output-map) - (daemon-wop-build-paths (*daemon*) (vector (string-append (derivation-path drv) "!" output-name))) - (set! drv-output-map (daemon-wop-query-derivation-output-map (*daemon*) (derivation-path drv)))) (let* ((known-path (cdr (assoc output-name drv-output-map))) (is-replaced (replace-placeholder (derivation-output-path output) known-path 0))) (when (and is-replaced (not (file-exists? known-path))) (set! needs-building #t)))) (when (or needs-building (not (or (derivation-output-placeholder? output) (file-exists? (derivation-output-path output))))) (set! context-to-build (cons (string-append (derivation-path drv) "!" output-name) context-to-build)))) + + (for-each + (lambda (drv-outputs) + (set! drv-output-map #f) + (for-each + (lambda (output-name) + (check-output-needs-building output-name (cdr (assoc output-name (derivation-outputs (car drv-outputs)))) (car drv-outputs))) + (cdr drv-outputs))) + drv-context) + (unless (null? placeholders-to-build) + (daemon-wop-build-paths (*daemon*) (list->vector placeholders-to-build))) (for-each (lambda (drv-outputs) (set! drv-output-map #f) diff --git a/lang/rust/src/cargo.sld b/lang/rust/src/cargo.sld index 4abfc20..c65a0f7 100644 --- a/lang/rust/src/cargo.sld +++ b/lang/rust/src/cargo.sld @@ -5,7 +5,7 @@ (zilch nixpkgs) (zilch zexpr) (zilch semver) json (chicken process) - (chicken base) (chicken format) (chicken file) + (chicken base) (chicken format) (chicken foreign) (srfi 4) (srfi 128) (srfi 146) (srfi 152) (srfi 207) (zilch lang rust registry) (zilch lang rust) (zilch lang rust cfg) @@ -334,25 +334,16 @@ (define package-links (and-cdr (assoc "links" package))) (define package-edition (or (and-cdr (assoc "edition" package)) "2015")) - (define has-build (and (zexp? vfs) (file-exists? (string-append (zexp-unquote vfs) "/build.rs")))) - - (unless (and vfs (vfs? vfs)) - (set! vfs #f)) - (define lib-target #f) - ;; TODO(puck): lack-of-vfs workarounds - (when (or (assoc "lib" internals) (if vfs (vfs-file-ref vfs "src" "lib.rs") #t)) + (when (or (assoc "lib" internals) (vfs-file-ref vfs "src" "lib.rs")) (set! lib-target (cargo-target-from-toml (or (and-cdr (assoc "lib" internals)) #()) package-name 'lib package-edition))) (define other-targets '()) - (when (and vfs (vfs-file-ref vfs "src" "main.rs")) + (when (vfs-file-ref vfs "src" "main.rs") (set! other-targets (cons (cargo-target-from-toml (vector (cons "name" package-name) (cons "path" "src/main.rs")) package-name 'bin package-edition) other-targets))) (define build-file-path (and-cdr (assoc "build" package))) - (when - (or - (and has-build (not build-file-path)) - (and vfs (vfs-file-ref vfs "" "build.rs"))) + (when (vfs-file-ref vfs "" "build.rs") (set! build-file-path "build.rs")) (define build-script-target #f) (when build-file-path diff --git a/lang/rust/src/resolver.sld b/lang/rust/src/resolver.sld index b45f313..d13721b 100644 --- a/lang/rust/src/resolver.sld +++ b/lang/rust/src/resolver.sld @@ -84,8 +84,9 @@ (define (resolver-download resolver name version) (unless version (error "Resolver wanted non-versioned download" name)) - (define vfs (force (cddr (mapping-ref (mapping-ref (resolver-locked-dependencies resolver) name) (version-str version))))) - (define-values (parsed-cargo parsed-workspace) (parse-cargo-toml vfs (call-with-port (store-path-open #~,(string-append #$vfs "/Cargo.toml")) (lambda (p) (read-string 99999999 p))) #f)) + (define dir (force (cddr (mapping-ref (mapping-ref (resolver-locked-dependencies resolver) name) (version-str version))))) + (define vfs (vfs-from-store dir)) + (define-values (parsed-cargo parsed-workspace) (parse-cargo-toml vfs (call-with-port (store-path-open (vfs-file-ref vfs "" "Cargo.toml")) (lambda (p) (read-string 99999999 p))) #f)) (unless (cargo-crate-lib-target parsed-cargo) (error "Crate does not have valid [lib] target" (list name version))) @@ -282,7 +283,7 @@ ; emits: (dep-info: #t) (define crate-name (cargo-target-name (resolved-package-cargo-target resolved))) (define crate-version (version-str (resolved-package-version resolved))) - (define crate-root (if (vfs? (resolved-package-fs resolved)) (vfs-to-store (resolved-package-fs resolved)) (resolved-package-fs resolved))) + (define crate-root (vfs-to-store (resolved-package-fs resolved))) (define crate-type (cargo-target-crate-type (resolved-package-cargo-target resolved))) ; TODO(puck): workaround for multi-crate-type targets. @@ -448,7 +449,7 @@ (unless (eq? crate-type 'rlib) (set! params `(codegen-flags: ("linker" . ,(force linker)) . ,params))) - (define path #~,(string-append #$(if (vfs? (resolved-package-fs resolved)) (vfs-to-store (resolved-package-fs resolved)) (resolved-package-fs resolved)) "/" (cargo-target-path (resolved-package-cargo-target resolved)))) + (define path #~,(string-append #$(vfs-to-store (resolved-package-fs resolved)) "/" (cargo-target-path (resolved-package-cargo-target resolved)))) (define dep-info (cdar (apply call-rustc `(,path ,rustc-env search-path: ("dependency" . ,transitive-dependencies-meta) emits: (dep-info: #t) . ,params-meta)))) (define rlib-name (string-append "lib" crate-name "-v" crate-version ".rlib"))