* [bug#57722] [PATCH] gnu: ipfs: Install bash completion. @ 2022-09-10 21:47 Michael Rohleder 2022-09-11 11:47 ` Maxime Devos 0 siblings, 1 reply; 7+ messages in thread From: Michael Rohleder @ 2022-09-10 21:47 UTC (permalink / raw) To: 57722; +Cc: Michael Rohleder * gnu/packages/ipfs.scm (ipfs)[arguments]: Add 'install-bashcompletion phase to install bash completion. --- gnu/packages/ipfs.scm | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/gnu/packages/ipfs.scm b/gnu/packages/ipfs.scm index ccc36007b4..faa209bf2a 100644 --- a/gnu/packages/ipfs.scm +++ b/gnu/packages/ipfs.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz> ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2019, 2020 Martin Becze <mjbecze@riseup.net> -;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de> +;;; Copyright © 2020, 2021, 2022 Michael Rohleder <mike@rohleder.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -230,7 +230,26 @@ (define-public go-ipfs (build-system go-build-system) (arguments `(#:unpack-path "github.com/ipfs/go-ipfs" - #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs")) + #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs" + #:modules ((guix build utils) + (guix build go-build-system) + (ice-9 popen) + (ice-9 textual-ports)) + #:phases + (modify-phases %standard-phases + ;; https://github.com/ipfs/kubo/blob/master/docs/command-completion.md + (add-after 'install 'install-bashcompletion + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (completiondir (string-append out "/etc/bash_completion.d"))) + (mkdir-p completiondir) + (call-with-output-file (string-append completiondir "/ipfs") + (lambda (port) + (let ((input-pipe (open-pipe* OPEN_READ + (string-append out "/bin/ipfs") + "commands" "completion" "bash"))) + (display (get-string-all input-pipe) port) + (close-pipe input-pipe)))))))))) (native-inputs (list python-minimal-wrapper zsh)) (home-page "https://ipfs.io") -- 2.37.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [bug#57722] [PATCH] gnu: ipfs: Install bash completion. 2022-09-10 21:47 [bug#57722] [PATCH] gnu: ipfs: Install bash completion Michael Rohleder @ 2022-09-11 11:47 ` Maxime Devos 2022-09-12 11:21 ` Maxime Devos 2022-09-13 9:49 ` Michael Rohleder 0 siblings, 2 replies; 7+ messages in thread From: Maxime Devos @ 2022-09-11 11:47 UTC (permalink / raw) To: Michael Rohleder, 57722 [-- Attachment #1.1.1: Type: text/plain, Size: 1950 bytes --] On 10-09-2022 23:47, Michael Rohleder wrote: > + (lambda* (#:key inputs outputs #:allow-other-keys) 'inputs' is unused. > + (let* ((out (assoc-ref outputs "out")) > + (completiondir (string-append out "/etc/bash_completion.d"))) #$output can be used nowadays instead of (assoc-ref outputs "out"). Then 'outputs' would be unused as well and the lambda can be simplified to (lambda _ [...]). > + (mkdir-p completiondir) > + (call-with-output-file (string-append completiondir "/ipfs") > + (lambda (port) > + (let ((input-pipe (open-pipe* OPEN_READ > + (string-append out "/bin/ipfs") > + "commands" "completion" "bash"))) > + (display (get-string-all input-pipe) port) > + (close-pipe input-pipe)))))))))) Can be simplified to (with-output-to-file (string-append completiondir "/ipfs") (invoke (string-append out "/bin/ipfs") "commands" "completion" "bash")) (untested) When cross-compiling, the cross-compiled bin/ipfs cannot be run. To solve this, you can add 'this-package' to the native-inputs conditional upon (%current-target-system): (native-inputs (append (if (%current-target-system) (list this-package) '()) (list python-minimal-wrapper zsh))). and in the build phase, do two separate cases: when compiling natively, use the ipfs from #$output as you're doing, when cross-compiling, use the ipfs from $PATH: (with-output-to-file (string-append completiondir "/ipfs") (invoke #$(if (%current-target-system) "ipfs" #~(string-append #$output "/bin/ipfs")) "commands" "completion" "bash")) Greetings, Maxime. [-- Attachment #1.1.2: OpenPGP public key --] [-- Type: application/pgp-keys, Size: 929 bytes --] [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 236 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* [bug#57722] [PATCH] gnu: ipfs: Install bash completion. 2022-09-11 11:47 ` Maxime Devos @ 2022-09-12 11:21 ` Maxime Devos 2022-09-13 9:49 ` Michael Rohleder 1 sibling, 0 replies; 7+ messages in thread From: Maxime Devos @ 2022-09-12 11:21 UTC (permalink / raw) To: Michael Rohleder, 57722 [-- Attachment #1.1.1: Type: text/plain, Size: 711 bytes --] On 11-09-2022 13:47, Maxime Devos wrote: > > and in the build phase, do two separate cases: when compiling natively, > use the ipfs from #$output as you're doing, when cross-compiling, use > the ipfs from $PATH: > > (with-output-to-file (string-append completiondir "/ipfs") > (invoke #$(if (%current-target-system) > "ipfs" > #~(string-append #$output "/bin/ipfs")) > "commands" "completion" "bash")) > Oops that incorrect, with-output-to-file is not a macro but a procedure accepting a thunk, try (with-output-to-file [...] (lambda () (invoke ...))) instead. [-- Attachment #1.1.2: OpenPGP public key --] [-- Type: application/pgp-keys, Size: 929 bytes --] [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 236 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* [bug#57722] [PATCH] gnu: ipfs: Install bash completion. 2022-09-11 11:47 ` Maxime Devos 2022-09-12 11:21 ` Maxime Devos @ 2022-09-13 9:49 ` Michael Rohleder 2022-09-13 10:48 ` Maxime Devos 2022-09-14 21:29 ` bug#57722: " Ludovic Courtès 1 sibling, 2 replies; 7+ messages in thread From: Michael Rohleder @ 2022-09-13 9:49 UTC (permalink / raw) To: Maxime Devos; +Cc: 57722 [-- Attachment #1.1: Type: text/plain, Size: 739 bytes --] Hey Maxime, Thank you for reviewing and your helpful tips! Here is a second version, I hope it's better. I dont know how to test cross compiling, though (on a x86_64 system): ./pre-inst-env guix build --system=aarch64-linux go-ipfs [...] building /gnu/store/ssvif7gdgv7xn7jmgmcp4ws71fgmwn5x-go-ipfs-0.11.0.drv... ;;; Stat of /tmp/guix-build-go-ipfs-0.11.0.drv-0/guile failed: ;;; In procedure stat: No such file or directory: "/tmp/guix-build-go-ipfs-0.11.0.drv-0/guile" Backtrace: 0 (primitive-load "/tmp/guix-build-go-ipfs-0.11.0.drv-0/g?") ERROR: In procedure primitive-load: In procedure open-file: No such file or directory: "/tmp/guix-build-go-ipfs-0.11.0.drv-0/guile" And then I'm completely lost and confused. ;) [-- Attachment #1.2: go-ipfs: Install bash completion. --] [-- Type: text/x-patch, Size: 2867 bytes --] From bbf32c53a2402f6f123d00d2e5ece9efdbf10504 Mon Sep 17 00:00:00 2001 From: Michael Rohleder <mike@rohleder.de> Date: Tue, 13 Sep 2022 11:29:23 +0200 Subject: [PATCH] gnu: go-ipfs: Install bash completion. * gnu/packages/ipfs.scm (go-ipfs)[arguments]: Use gexp. Add 'install-bashcompletion phase to install bash completion. --- gnu/packages/ipfs.scm | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/gnu/packages/ipfs.scm b/gnu/packages/ipfs.scm index ccc36007b4..d1e04c3ae0 100644 --- a/gnu/packages/ipfs.scm +++ b/gnu/packages/ipfs.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz> ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2019, 2020 Martin Becze <mjbecze@riseup.net> -;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de> +;;; Copyright © 2020, 2021, 2022 Michael Rohleder <mike@rohleder.de> ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,6 +22,7 @@ (define-module (gnu packages ipfs) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) + #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (guix download) #:use-module (guix build-system go) @@ -229,10 +230,28 @@ (define-public go-ipfs (file-name (string-append name "-" version "-source")))) (build-system go-build-system) (arguments - `(#:unpack-path "github.com/ipfs/go-ipfs" - #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs")) + (list + #:unpack-path "github.com/ipfs/go-ipfs" + #:import-path "github.com/ipfs/go-ipfs/cmd/ipfs" + #:phases + #~(modify-phases %standard-phases + ;; https://github.com/ipfs/kubo/blob/master/docs/command-completion.md + (add-after 'install 'install-bashcompletion + (lambda _ + (let ((completiondir (string-append #$output + "/etc/bash_completion.d"))) + (mkdir-p completiondir) + (with-output-to-file (string-append completiondir "/ipfs") + (lambda _ + (invoke #$(if (%current-target-system) + "ipfs" + #~(string-append #$output "/bin/ipfs")) + "commands" "completion" "bash"))))))))) (native-inputs - (list python-minimal-wrapper zsh)) + (append (if (%current-target-system) + (list this-package) + '()) + (list python-minimal-wrapper zsh))) (home-page "https://ipfs.io") (synopsis "Go implementation of IPFS, a peer-to-peer hypermedia protocol") (description "IPFS is a global, versioned, peer-to-peer file system. It -- 2.37.3 [-- Attachment #1.3: Type: text/plain, Size: 131 bytes --] -- Nichts ist in der Welt ist so gerecht verteilt wie der Verstand. Jedermann ist der Meinung, dass er genuegend davon hat. [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 511 bytes --] ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [bug#57722] [PATCH] gnu: ipfs: Install bash completion. 2022-09-13 9:49 ` Michael Rohleder @ 2022-09-13 10:48 ` Maxime Devos 2022-09-13 11:02 ` Maxime Devos 2022-09-14 21:29 ` bug#57722: " Ludovic Courtès 1 sibling, 1 reply; 7+ messages in thread From: Maxime Devos @ 2022-09-13 10:48 UTC (permalink / raw) To: Michael Rohleder; +Cc: 57722 [-- Attachment #1.1.1: Type: text/plain, Size: 687 bytes --] On 13-09-2022 11:49, Michael Rohleder wrote: > I dont know how to test cross compiling, though (on a x86_64 system): > > ./pre-inst-env guix build --system=aarch64-linux go-ipfs > [...] That's (emulated) native compilation (which requires setting up QEMU transparent emulation), not cross-compilation. While they can accomplish the same result, they function completely different -- from Guix POV, emulated builds are just native (non-cross-compiling) builds. Instead, try ./pre-inst-env guix build --target=aarch64-linux-gnu go-ipfs ... which will fail because the imported-modules aren't imported, which is a bug (I'll report it). Greetings, Maxime. [-- Attachment #1.1.2: OpenPGP public key --] [-- Type: application/pgp-keys, Size: 929 bytes --] [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 236 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* [bug#57722] [PATCH] gnu: ipfs: Install bash completion. 2022-09-13 10:48 ` Maxime Devos @ 2022-09-13 11:02 ` Maxime Devos 0 siblings, 0 replies; 7+ messages in thread From: Maxime Devos @ 2022-09-13 11:02 UTC (permalink / raw) To: Michael Rohleder; +Cc: 57722 [-- Attachment #1.1.1: Type: text/plain, Size: 305 bytes --] On 13-09-2022 12:48, Maxime Devos wrote: > [...] > > ./pre-inst-env guix build --target=aarch64-linux-gnu go-ipfs > > ... which will fail because the imported-modules aren't imported, which > is a bug (I'll report it). See: <https://issues.guix.gnu.org/57766>. > Greetings, > Maxime. [-- Attachment #1.1.2: OpenPGP public key --] [-- Type: application/pgp-keys, Size: 929 bytes --] [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 236 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* bug#57722: [PATCH] gnu: ipfs: Install bash completion. 2022-09-13 9:49 ` Michael Rohleder 2022-09-13 10:48 ` Maxime Devos @ 2022-09-14 21:29 ` Ludovic Courtès 1 sibling, 0 replies; 7+ messages in thread From: Ludovic Courtès @ 2022-09-14 21:29 UTC (permalink / raw) To: Michael Rohleder; +Cc: 57722-done, Maxime Devos Michael Rohleder <mike@rohleder.de> skribis: > From bbf32c53a2402f6f123d00d2e5ece9efdbf10504 Mon Sep 17 00:00:00 2001 > From: Michael Rohleder <mike@rohleder.de> > Date: Tue, 13 Sep 2022 11:29:23 +0200 > Subject: [PATCH] gnu: go-ipfs: Install bash completion. > > * gnu/packages/ipfs.scm (go-ipfs)[arguments]: Use gexp. > Add 'install-bashcompletion phase to install bash completion. Applied, thanks! Great that Maxime found a bug as a side effect. :-) ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-09-14 21:30 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-09-10 21:47 [bug#57722] [PATCH] gnu: ipfs: Install bash completion Michael Rohleder 2022-09-11 11:47 ` Maxime Devos 2022-09-12 11:21 ` Maxime Devos 2022-09-13 9:49 ` Michael Rohleder 2022-09-13 10:48 ` Maxime Devos 2022-09-13 11:02 ` Maxime Devos 2022-09-14 21:29 ` bug#57722: " Ludovic Courtès
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).