diff mbox series

[bug#50833,v2] gnu: Add bower.

Message ID 20220720051833.23801-1-jgart@dismail.de
State Accepted
Headers show
Series [bug#50833,v2] gnu: Add bower. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git-branch success View Git branch
cbaines/applying patch success View Laminar job
cbaines/issue success View issue

Commit Message

jgart July 20, 2022, 5:18 a.m. UTC
* gnu/packages/mail.scm (bower): New variable.

Hi Maxim, Here's v2 patching the executables you requested. Sorry for the delay.

all best,

jgart
---
 gnu/packages/mail.scm | 80 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)

Comments

M July 20, 2022, 11:59 a.m. UTC | #1
On 20-07-2022 07:18, jgart via Guix-patches via wrote:
> * gnu/packages/mail.scm (bower): New variable.
>
> Hi Maxim, Here's v2 patching the executables you requested. Sorry for the delay.
>
> all best,
>
> jgart
> ---
>   gnu/packages/mail.scm | 80 +++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 80 insertions(+)
>
> diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
> index 556c5b4305..afad1cc4bf 100644
> --- a/gnu/packages/mail.scm
> +++ b/gnu/packages/mail.scm
> @@ -48,6 +48,7 @@
>   ;;; Copyright © 2022 Justin Veilleux<terramorpha@cock.li>
>   ;;; Copyright © 2022 Thiago Jung Bauermann<bauermann@kolabnow.com>
>   ;;; Copyright © 2022 Guillaume Le Vaillant<glv@posteo.net>
> +;;; Copyright © 2022 jgart<jgart@dismail.de>
>   ;;;
>   ;;; This file is part of GNU Guix.
>   ;;;
> @@ -124,6 +125,7 @@ (define-module (gnu packages mail)
>     #:use-module (gnu packages lua)
>     #:use-module (gnu packages m4)
>     #:use-module (gnu packages man)
> +  #:use-module (gnu packages mercury)
>     #:use-module (gnu packages ncurses)
>     #:use-module (gnu packages nettle)
>     #:use-module (gnu packages networking)
> @@ -1522,6 +1524,84 @@ (define-public python-notmuch2
>       (synopsis "Pythonic bindings for the notmuch mail database using CFFI")
>       (license license:gpl3+)))
>   
> +(define-public bower
> +  (package
> +    (name "bower")
> +    (version "0.13")
> +    (home-page"https://github.com/wangp/bower")
> +    (source
> +     (origin
> +       (method git-fetch)
> +       (uri
> +        (git-reference
> +         (url home-page)
> +         (commit version)))
> +       (file-name (git-file-name name version))
> +       (sha256
> +        (base32 "0r5s16pc3ym5nd33lv9ljv1p1gpb7yysrdni4g7w7yvjrnwk35l6"))))
> +    (build-system gnu-build-system)
> +    (arguments
> +     `(#:make-flags
> +       (list
> +        "bower"
> +        "man"
> +        (string-append "CC=" ,(cc-for-target))
> +        (string-append "prefix=" %output))


IIRC, %output is not documented -- you can use #$output instead:

(arguments
   (list #:make-flags
         #~(list "bower" "man" (string-append "CC=" #$(cc-for-target)) (string-append "prefix=" #$output))
         [...]))

> +       #:phases
> +       (modify-phases %standard-phases
> +         (delete 'configure)
> +         (add-after 'unpack 'patch-executables
> +           (lambda* (#:key inputs #:allow-other-keys)
> +             (let ((file (assoc-ref inputs "file"))
> +                   (base64 (assoc-ref inputs "coreutils"))
> +                   (lynx (assoc-ref inputs "lynx"))
> +                   (sendmail (assoc-ref inputs "sendmail"))
> +                   (notmuch (assoc-ref inputs "notmuch")))
> +               (substitute* "src/detect_mime_type.m"
> +                 (("\"file")
> +                  (string-append "\"" file "/bin/file")))

Not using input labels is preferred (such that package transformations 
can easily be used to, say, replace "coreutils" with something 
sufficiently compatible that isn't "coreutils"). You can use 
search-input-file instead. E.g.,:

(substitute* "src/detect_mime_type.m"
   ("\"file") (string-append "\"" (search-input-file inputs "/bin/file")))
   [...])

and likewise for the other substitutions.

> +               (substitute* "src/compose.m"
> +                 (("\"base64")
> +                  (string-append "\"" base64 "/bin/base64"))
> +                  (("\"lynx")
> +                   (string-append "\"" lynx "/bin/lynx")))
> +               (substitute* "src/prog_config.m"
> +                 (("\"notmuch\"")
> +                  (string-append "\"" notmuch "/bin/notmuch\""))
> +                  (("/usr/bin/sendmail")
> +                  (string-append sendmail "/sbin/sendmail"))
> +                  (("\"lynx")
> +                   (string-append "\"" lynx "/bin/lynx"))))))
> +         (replace 'check
> +           (lambda* (#:key inputs outputs tests? #:allow-other-keys)

You are not using inputs or outputs here, so they can be removed.

> +             (when tests?
> +               (chdir "tests")
> +               (invoke "make"))))


Due to the issue noted below, I recommend keeping the 'chdir' 
unconditional. I believe (with-directory-excursion ...) to be even 
better, as it restores the change in directory automatically, less room 
for trouble.

> +         (replace 'install
> +           (lambda* (#:key outpus #:allow-other-keys)

You are not using 'outpus' here (also, 'outpus' -> 'outputs'), so it can 
be removed.

> +             (let ((bin (string-append (assoc-ref %outputs "out") "/bin"))
> +                   (man (string-append (assoc-ref %outputs "out") "/share/man/man1")))
I'd replace (assoc-ref %outputs "out") by #$output (don't forget to add 
#~ before the (modify-phases ...)) to avoid the assoc-ref construct and 
%outputs in favour of the simpler #$output.
> +               (chdir "..")
This is to undo the (chdir "tests") above, right?  If so, remember that 
the (chdir "tests") above is unconditional, so this will break when 
tests are disabled (in case of --without-tests, or in case of 
cross-compiling with --target=aarch64-linux-gnu or such).  So it needs 
to be made conditional on tests? as well, or the (chdir "tests") from 
above would need to be made unconditional, or the with-directory-excursion.

Greetings,
Maxime
jgart July 24, 2022, 5:45 p.m. UTC | #2
On Wed, 20 Jul 2022 13:59:19 +0200 Maxime Devos <maximedevos@telenet.be> wrote:
> 
> On 20-07-2022 07:18, jgart via Guix-patches via wrote:

Hi Maxime,

Thanks for the review!

Give me till next weekend to try again with your new suggestions.

all best,

jgart
diff mbox series

Patch

diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 556c5b4305..afad1cc4bf 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -48,6 +48,7 @@ 
 ;;; Copyright © 2022 Justin Veilleux <terramorpha@cock.li>
 ;;; Copyright © 2022 Thiago Jung Bauermann <bauermann@kolabnow.com>
 ;;; Copyright © 2022 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2022 jgart <jgart@dismail.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -124,6 +125,7 @@  (define-module (gnu packages mail)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages man)
+  #:use-module (gnu packages mercury)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages networking)
@@ -1522,6 +1524,84 @@  (define-public python-notmuch2
     (synopsis "Pythonic bindings for the notmuch mail database using CFFI")
     (license license:gpl3+)))
 
+(define-public bower
+  (package
+    (name "bower")
+    (version "0.13")
+    (home-page "https://github.com/wangp/bower")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url home-page)
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0r5s16pc3ym5nd33lv9ljv1p1gpb7yysrdni4g7w7yvjrnwk35l6"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       (list
+        "bower"
+        "man"
+        (string-append "CC=" ,(cc-for-target))
+        (string-append "prefix=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'unpack 'patch-executables
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((file (assoc-ref inputs "file"))
+                   (base64 (assoc-ref inputs "coreutils"))
+                   (lynx (assoc-ref inputs "lynx"))
+                   (sendmail (assoc-ref inputs "sendmail"))
+                   (notmuch (assoc-ref inputs "notmuch")))
+               (substitute* "src/detect_mime_type.m"
+                 (("\"file")
+                  (string-append "\"" file "/bin/file")))
+               (substitute* "src/compose.m"
+                 (("\"base64")
+                  (string-append "\"" base64 "/bin/base64"))
+                  (("\"lynx")
+                   (string-append "\"" lynx "/bin/lynx")))
+               (substitute* "src/prog_config.m"
+                 (("\"notmuch\"")
+                  (string-append "\"" notmuch "/bin/notmuch\""))
+                  (("/usr/bin/sendmail")
+                  (string-append sendmail "/sbin/sendmail"))
+                  (("\"lynx")
+                   (string-append "\"" lynx "/bin/lynx"))))))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (chdir "tests")
+               (invoke "make"))))
+         (replace 'install
+           (lambda* (#:key outpus #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref %outputs "out") "/bin"))
+                   (man (string-append (assoc-ref %outputs "out") "/share/man/man1")))
+               (chdir "..")
+               (install-file "bower" bin)
+               (install-file "bower.1" man)))))))
+    (native-inputs
+     (list diffutils
+           gawk
+           mercury
+           pandoc
+           util-linux))
+    (inputs
+     (list gpgme
+           coreutils
+           lynx
+           notmuch
+           sendmail
+           ncurses))
+    (synopsis "Terminal client for the notmuch email system")
+    (description "@code{bower} is a curses frontend for the notmuch email
+system.  It is written in @{mercury}.")
+    (license license:gpl3+)))
+
 (define-public muchsync
   (package
     (name "muchsync")