(zilch lang rust): remove lack-of-vfs workarounds
This commit is contained in:
parent
59dc27b94c
commit
e42315e67a
3 changed files with 29 additions and 20 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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"))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue