(zilch lang rust): remove lack-of-vfs workarounds

This commit is contained in:
puck 2024-11-27 17:32:13 +00:00
parent 59dc27b94c
commit e42315e67a
3 changed files with 29 additions and 20 deletions

View file

@ -185,21 +185,38 @@
(define context-to-build '()) (define context-to-build '())
(define drv-output-map #f) (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 (process-output output-name output drv)
(define needs-building #f) (define needs-building #f)
(when (and (derivation-output-placeholder? output) (string-contains path (derivation-output-path output))) (when (and (derivation-output-placeholder? output) (string-contains path (derivation-output-path output)))
(unless drv-output-map (unless drv-output-map
(set! drv-output-map (daemon-wop-query-derivation-output-map (*daemon*) (derivation-path drv)))) (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))) (let* ((known-path (cdr (assoc output-name drv-output-map)))
(is-replaced (replace-placeholder (derivation-output-path output) known-path 0))) (is-replaced (replace-placeholder (derivation-output-path output) known-path 0)))
(when (and is-replaced (not (file-exists? known-path))) (when (and is-replaced (not (file-exists? known-path)))
(set! needs-building #t)))) (set! needs-building #t))))
(when (or needs-building (not (or (derivation-output-placeholder? output) (file-exists? (derivation-output-path output))))) (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)))) (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 (for-each
(lambda (drv-outputs) (lambda (drv-outputs)
(set! drv-output-map #f) (set! drv-output-map #f)

View file

@ -5,7 +5,7 @@
(zilch nixpkgs) (zilch zexpr) (zilch semver) (zilch nixpkgs) (zilch zexpr) (zilch semver)
json json
(chicken process) (chicken process)
(chicken base) (chicken format) (chicken file) (chicken base) (chicken format)
(chicken foreign) (chicken foreign)
(srfi 4) (srfi 128) (srfi 146) (srfi 152) (srfi 207) (srfi 4) (srfi 128) (srfi 146) (srfi 152) (srfi 207)
(zilch lang rust registry) (zilch lang rust) (zilch lang rust cfg) (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-links (and-cdr (assoc "links" package)))
(define package-edition (or (and-cdr (assoc "edition" package)) "2015")) (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) (define lib-target #f)
;; TODO(puck): lack-of-vfs workarounds (when (or (assoc "lib" internals) (vfs-file-ref vfs "src" "lib.rs"))
(when (or (assoc "lib" internals) (if vfs (vfs-file-ref vfs "src" "lib.rs") #t))
(set! lib-target (cargo-target-from-toml (or (and-cdr (assoc "lib" internals)) #()) package-name 'lib package-edition))) (set! lib-target (cargo-target-from-toml (or (and-cdr (assoc "lib" internals)) #()) package-name 'lib package-edition)))
(define other-targets '()) (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))) (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))) (define build-file-path (and-cdr (assoc "build" package)))
(when (when (vfs-file-ref vfs "" "build.rs")
(or
(and has-build (not build-file-path))
(and vfs (vfs-file-ref vfs "" "build.rs")))
(set! build-file-path "build.rs")) (set! build-file-path "build.rs"))
(define build-script-target #f) (define build-script-target #f)
(when build-file-path (when build-file-path

View file

@ -84,8 +84,9 @@
(define (resolver-download resolver name version) (define (resolver-download resolver name version)
(unless version (unless version
(error "Resolver wanted non-versioned download" name)) (error "Resolver wanted non-versioned download" name))
(define vfs (force (cddr (mapping-ref (mapping-ref (resolver-locked-dependencies resolver) name) (version-str version))))) (define dir (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 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) (unless (cargo-crate-lib-target parsed-cargo)
(error "Crate does not have valid [lib] target" (list name version))) (error "Crate does not have valid [lib] target" (list name version)))
@ -282,7 +283,7 @@
; emits: (dep-info: #t) ; emits: (dep-info: #t)
(define crate-name (cargo-target-name (resolved-package-cargo-target resolved))) (define crate-name (cargo-target-name (resolved-package-cargo-target resolved)))
(define crate-version (version-str (resolved-package-version 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))) (define crate-type (cargo-target-crate-type (resolved-package-cargo-target resolved)))
; TODO(puck): workaround for multi-crate-type targets. ; TODO(puck): workaround for multi-crate-type targets.
@ -448,7 +449,7 @@
(unless (eq? crate-type 'rlib) (unless (eq? crate-type 'rlib)
(set! params `(codegen-flags: ("linker" . ,(force linker)) . ,params))) (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 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")) (define rlib-name (string-append "lib" crate-name "-v" crate-version ".rlib"))