gnu: rust-analyzer: Make it work out of the box.

* gnu/packages/rust.scm (rust-src): New variable.
* gnu/packages/rust-apps.scm (rust-analyzer): [native-inputs]: Add rust-src.
[arguments]: <#:phases>: Add wrap-program phase.

Signed-off-by: Nicolas Goaziou <mail@nicolasgoaziou.fr>
This commit is contained in:
Z572 via Guix-patches via 2022-01-22 12:37:10 +08:00 committed by Nicolas Goaziou
parent 1c79490804
commit d96f47f012
No known key found for this signature in database
GPG key ID: DA00B4F048E92F2D
2 changed files with 45 additions and 0 deletions

View file

@ -1492,6 +1492,30 @@ (define-public rust-analyzer
(add-before 'install 'chdir
(lambda _
(chdir "crates/rust-analyzer")))
(add-after 'install 'wrap-program
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(rust-src-path (search-input-directory
inputs "/lib/rustlib/src/rust/library")))
;; if environment variable RUST_SRC_PATH is not set, set it,
;; make rust-analyzer work out of box.
(with-directory-excursion bin
(let* ((prog "rust-analyzer")
(wrapped-file (string-append (dirname prog)
"/." (basename prog) "-real"))
(prog-tmp (string-append wrapped-file "-tmp")))
(link prog wrapped-file)
(call-with-output-file prog-tmp
(lambda (port)
(format port "#!~a
if test -z \"${RUST_SRC_PATH}\";then export RUST_SRC_PATH=~S;fi;
exec -a \"$0\" \"~a\" \"$@\""
(which "bash")
rust-src-path
(canonicalize-path wrapped-file))))
(chmod prog-tmp #o755)
(rename-file prog-tmp prog))))))
(replace 'install-license-files
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
@ -1500,6 +1524,7 @@ (define-public rust-analyzer
(chdir "../..")
(install-file "LICENSE-MIT" doc)
(install-file "LICENSE-APACHE" doc)))))))
(native-inputs (list rust-src))
(home-page "https://rust-analyzer.github.io/")
(synopsis "Experimental Rust compiler front-end for IDEs")
(description "Rust-analyzer is a modular compiler frontend for the Rust

View file

@ -13,6 +13,7 @@
;;; Copyright © 2020 Matthew James Kraai <kraai@ftbfs.org>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 (unmatched parenthesis <paren@disroot.org>
;;; Copyright © 2022 Zheng Junjie <873216071@qq.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -49,6 +50,7 @@ (define-module (gnu packages rust)
#:use-module (gnu packages tls)
#:use-module (gnu packages)
#:use-module (guix build-system cargo)
#:use-module (guix build-system copy)
#:use-module (guix build-system gnu)
#:use-module (guix build-system trivial)
#:use-module (guix download)
@ -787,3 +789,21 @@ (define rust-1.57
;;; be relied upon. This is to ease maintenance and reduce the time
;;; required to build the full Rust bootstrap chain.
(define-public rust rust-1.57)
(define-public rust-src
(hidden-package
(package
(inherit rust)
(name "rust-src")
(build-system copy-build-system)
(native-inputs '())
(inputs '())
(native-search-paths '())
(outputs '("out"))
(arguments
`(#:install-plan
'(("library" "lib/rustlib/src/rust/library")
("src" "lib/rustlib/src/rust/src"))))
(synopsis "Source code for the Rust standard library")
(description "This package provide source code for the Rust standard
library, only use by rust-analyzer, make rust-analyzer out of the box."))))