~ruther/guix-local

32f9304e0d78c9c7061a02012355f1d79da2f5ed — Nicolas Graves 8 months ago b186b25
build-system: cargo: Migrate to `cargo metadata`.

cargo read-manifest complains about its deprecation. The replacement
is cargo metadata --no-deps --format-version 1, see
https://github.com/rust-lang/cargo/issues/13629#cargo-read-manifest

* guix/build/cargo-build-system.scm (manifest-targets): Refresh using
`cargo metadata`.
(has-executable-target?): Refresh accordingly.

Change-Id: I4cd4881d37523a7ac1f70e68df457ceb9075c1c3
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
1 files changed, 8 insertions(+), 4 deletions(-)

M guix/build/cargo-build-system.scm
M guix/build/cargo-build-system.scm => guix/build/cargo-build-system.scm +8 -4
@@ 37,6 37,7 @@
  #:use-module (ice-9 threads)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-26)
  #:use-module (srfi srfi-43)
  #:use-module (json)
  #:export (%standard-phases
            cargo-build))


@@ 49,9 50,12 @@

(define (manifest-targets)
  "Extract all targets from the Cargo.toml manifest"
  (let* ((port (open-input-pipe "cargo read-manifest"))
  (let* ((command (string-join (list "cargo" "metadata" "--no-deps"
                                      "--format-version" "1")))
         (port (open-input-pipe command))
         (data (json->scm port))
         (targets (or (assoc-ref data "targets") '())))
         (packages (vector-ref (assoc-ref data "packages") 0))
         (targets (or (assoc-ref packages "targets") '())))
    (close-port port)
    targets))



@@ 59,8 63,8 @@
  "Check if the current cargo project declares any binary targets."
  (let* ((bin? (lambda (kind) (string=? kind "bin")))
         (get-kinds (lambda (dep) (assoc-ref dep "kind")))
         (bin-dep? (lambda (dep) (find bin? (get-kinds dep)))))
    (find bin-dep? (manifest-targets))))
         (bin-dep? (lambda (dep) (vector-any bin? (get-kinds dep)))))
    (vector-any bin-dep? (manifest-targets))))

(define (cargo-package? dir)
  "Check if directory DIR contains a single package, or a Cargo workspace with