benjamin wil <[email protected]> writes:

> Hi there,
>
> I'm attempting to package a Rust program, `kak-tree-sitter`, that's 
> available as a crate, but am having some difficulties. I'll try to 
> describe what I've done so far... it's possible I'm doing something very 
> obviously wrong as I'm quite new to Guix.
>
> The program relies on another crate, `kak-tree-sitter-config`, that I 
> think Guix should consider "private package". Both `kak-tree-sitter` and 
> `kak-tree-sitter-config` use a single git repository to store their 
> source code.
>
> As suggested by the documentation about common workflows for Rust 
> packaging I have used `guix import` to get a list of crate dependencies 
> for both `kak-tree-sitter` and `kak-tree-sitter-config`:
>
>      cd $HOME/Dev/kak-tree-sitter
>
>      guix import \
>        --insert=$HOME/Dev/guix/gnu/packages/rust-crates.scm \
>        crate --lockfile=./Cargo.lock kak-tree-sitter
>
>      guix import \
>        --insert=$HOME/Dev/guix/gnu/packages/rust-crates.scm \
>        crate --lockfile=./Cargo.lock kak-tree-sitter-config
>
> This appears to have worked as intended but did not provide a definition 
> for `kak-tree-sitter-config`, so I manually added a `rust-` prefixed 
> entry to `rust-sources.scm` and to `rust-crates.scm`.
>
> In addition to that, I have added package entries for both 
> `kak-tree-sitter` and `kak-tree-sitter-config` to the `text-editors.scm` 
> package list for now:
>
>      # gnu/packages/rust-sources.scm
>      (define-public rust-kak-tree-sitter-config-3.0.0
>        (hidden-package
>         (package
>          (name "rust-kak-tree-sitter-config")
>          (version "3.0.0")
>          (source (origin
>                    (method url-fetch)
>                    (uri (crate-uri "kak-tree-sitter-config" version))
>                    (file-name (string-append name "-v" version ".tar.gz"))
>                    (sha256
>                     (base32 
> "1s2g4z1yrh1sxl4qkmpd19ss3x2lr9115vbir7pnhgy63r1d63yv"))))
>          (build-system cargo-build-system)
>          (inputs (cargo-inptus 'rust-kak-tree-sitter-config-3.0.0))
>          (home-page "https://sh.rt/~hadronized/kak-tree-sitter";)
>          (synopsis "Configuration package for kak-tree-sitter")
>          (description "Configuration package for kak-tree-sitter")
>          (license license:bsd-3))))
>
>      # gnu/packages/rust-crates.scm
>      (define rust-kak-tree-sitter-config-3.0.0
>        (crate-source "kak-tree-sitter-config" "3.0.0"
> "0mcpy1gdxpqayc74i3x3ayh3q5bl6dzvsgmw91jq1r9sjkxill0r"))
>
>      # gnu/packages/text-editors.csm
>      (define-public kak-tree-sitter
>        (package
>          (name "kak-tree-sitter")
>          (version "2.0.0")
>          (source
>           (origin
>             (method url-fetch)
>             (uri (crate-uri "kak-tree-sitter" version))
>             (file-name (string-append name "-" version ".tar.gz"))
>             (sha256
>              (base32 
> "0kmilfxfm426jgkdvp2n668iwfi56v08bhv2wgp7hi4yf24kygl2"))))
>          (build-system cargo-build-system)
>          (inputs (cargo-inputs 'kak-tree-sitter))
>          (home-page "https://sr.ht/~hadronized/kak-tree-sitter/";)
>          (synopsis "Server between Kakoune and tree-sitter")
>          (description
>           "This package provides Server between Kakoune and tree-sitter.")
>          (license license:bsd-3)))
>
>      (define-public kak-tree-sitter-config
>        (package
>          (name "kak-tree-sitter-config")
>          (version "3.0.0")
>          (source
>           (origin
>             (method url-fetch)
>             (uri (crate-uri "kak-tree-sitter-config" version))
>             (file-name (string-append name "-" version ".tar.gz"))
>             (sha256
>              (base32 
> "03yjv9rsc5l8ky4dc5s1b3sg7fhfl9nsz2mgv42lsvqifidjkqqj"))))
>          (build-system cargo-build-system)
>          (inputs (cargo-inputs 'kak-tree-sitter-config))
>          (home-page "https://sr.ht/~hadronized/kak-tree-sitter";)
>          (synopsis "Server between Kakoune and tree-sitter; 
> configuration layer")
>          (description
>           "This package provides Server between Kakoune and tree-sitter; 
> configuration layer.")
>          (license license:bsd-3)))
>
> Despite my having defined these packages, running `./pre-inst-env guix 
> build kak-tree-sitter` results in in an error, `no matching package 
> named 'kak-tree-sitter-config'` despite there being both a 
> `kak-tree-sitter-config` and `rust-kak-tree-sitter-config` defined, as 
> well as a real crate on htths://crates.io. Here is the error and stack 
> trace following:
>
>      error: no matching package named `kak-tree-sitter-config` found
>      location searched: directory source 
> `/tmp/guix-build-kak-tree-sitter-2.0.0.drv-0/kak-tree-sitter-2.0.0/guix-vendor`
>  
> (which is replacing registry `crates-io`)
>      required by package `kak-tree-sitter v2.0.0 
> (/tmp/guix-build-kak-tree-sitter-2.0.0.drv-0/kak-tree-sitter-2.0.0)`
>      As a reminder, you're using offline mode (--offline) which can 
> sometimes cause surprising resolution failures, if this error is too 
> confusing you may wish to retry without the offline flag.
>      error: in phase 'build': uncaught exception:
>      %exception #<&invoke-error program: "cargo" arguments: ("build" 
> "--offline" "-j" "16" "--release") exit-status: 101 term-signal: #f 
> stop-signal: #f>
>      phase `build' failed after 0.1 seconds
>      command "cargo" "build" "--offline" "-j" "16" "--release" failed 
> with status 101
>      build process 18 exited with status 256
>      note: keeping build directory 
> `/tmp/guix-build-kak-tree-sitter-2.0.0.drv-15'
>      builder for 
> `/gnu/store/nh4scf63kl9fisgf4fdmndrr93x1hfc1-kak-tree-sitter-2.0.0.drv' 
> failed with exit code 1
>      build of 
> /gnu/store/nh4scf63kl9fisgf4fdmndrr93x1hfc1-kak-tree-sitter-2.0.0.drv failed
>      View build log at 
> '/var/log/guix/drvs/nh/4scf63kl9fisgf4fdmndrr93x1hfc1-kak-tree-sitter-2.0.0.drv.gz'.
>      guix build: error: build of 
> `/gnu/store/nh4scf63kl9fisgf4fdmndrr93x1hfc1-kak-tree-sitter-2.0.0.drv' 
> failed
>
>
> So, it seems likely that I am missing *something* and have probably 
> defined more things called `kak-tree-sitter-config` than I actually need 
> to. But I'm not sure what actions to take next. Would appreciate any 
> hints you have to get be started in the right direction.
>
> Thanks!
> Benjamin

Hey Benjamin,

It seems you’re trying to import a Cargo workspace. They are handled a
bit differently from single packages. See
<https://guix.gnu.org/cookbook/en/html_node/Cargo-Workspaces-and-Development-Snapshots.html>.

As I understand it, you would have only one workspace package in
rust-sources.scm for both, then add aliases to each contained library in
rust-crates.scm (see
<https://guix.gnu.org/cookbook/en/html_node/Common-Workflow-for-Rust-Packaging.html>).

Hope that helps,
Noé

Attachment: signature.asc
Description: PGP signature

Reply via email to