summary refs log tree commit diff
path: root/gnu/packages/gnupg.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/gnupg.scm')
-rw-r--r--gnu/packages/gnupg.scm274
1 files changed, 143 insertions, 131 deletions
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 348724e8fb..665e9e3021 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -18,6 +18,7 @@
 ;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Fredrik Salomonsson <plattfot@posteo.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021 Nikita Domnitskii <nikita@domnitskii.me>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -80,13 +81,14 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
+  #:use-module (ice-9 match)
   #:use-module (guix build-system meson)
   #:use-module (srfi srfi-1))
 
 (define-public libgpg-error
   (package
     (name "libgpg-error")
-    (version "1.37")
+    (version "1.42")
     (source
      (origin
       (method url-fetch)
@@ -94,32 +96,48 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "0qwpx8mbc2l421a22l0l1hpzkip9jng06bbzgxwpkkvk5bvnybdk"))))
+        "08syj8mlarww8mh8x3s0x6hjqbnxp2lkg3hab57qqpv1dh7yf1zw"))))
     (build-system gnu-build-system)
     (arguments
      (if (%current-target-system)
-         `(#:modules ((ice-9 match)
-                      (guix build gnu-build-system)
+         `(#:modules ((guix build gnu-build-system)
                       (guix build utils))
            #:phases
            (modify-phases %standard-phases
+             ;; If this is left out, some generated header
+             ;; files will be sprinkled with ‘\c’, which
+             ;; the compiler won't like.
+             (add-after 'unpack 'fix-gen-lock-obj.sh
+               (lambda _
+                 (substitute* "src/gen-lock-obj.sh"
+                   (("if test -n `echo -n`") "if ! test -n `echo -n`"))))
              ;; When cross-compiling, some platform specific properties cannot
              ;; be detected. Create a symlink to the appropriate platform
-             ;; file. See Cross-Compiling section at:
+             ;; file if required. Note that these platform files depend on
+             ;; both the operating system and architecture!
+             ;;
+             ;; See Cross-Compiling section at:
              ;; https://github.com/gpg/libgpg-error/blob/master/README
              (add-after 'unpack 'cross-symlinks
-               (lambda* (#:key target inputs #:allow-other-keys)
-                 (let ((triplet
-                        (match (string-take target
-                                            (string-index target #\-))
-                          ("armhf" "arm-unknown-linux-gnueabi")
-                          ("mips64el" "mips-unknown-linux-gnu")
-                          (x
-                           (string-append x "-unknown-linux-gnu")))))
-                   (symlink
-                    (string-append "lock-obj-pub." triplet ".h")
-                    "src/syscfg/lock-obj-pub.linux-gnu.h"))
-                 #t))))
+               (lambda _
+                 (define (link triplet source)
+                   (symlink (string-append "lock-obj-pub." triplet ".h")
+                            (string-append "src/syscfg/lock-obj-pub."
+                                           source ".h")))
+                 ,(let* ((target (%current-target-system))
+                         (architecture
+                          (string-take target (string-index target #\-))))
+                    (cond ((target-linux? target)
+                           (match architecture
+                             ("armhf"
+                              `(link "arm-unknown-linux-gnueabi" "linux-gnu"))
+                             ("mips64el"
+                              `(link "mips-unknown-linux-gnu" "linux-gnu"))
+                             ;; Don't always link to the "linux-gnu"
+                             ;; configuration, as this is not correct for
+                             ;; all architectures.
+                             (_ #t)))
+                          (#t #t)))))))
          '()))
     (native-inputs `(("gettext" ,gettext-minimal)))
     (home-page "https://gnupg.org")
@@ -136,14 +154,14 @@ Daemon and possibly more in the future.")
 (define-public libgcrypt
   (package
     (name "libgcrypt")
-    (version "1.8.5")
+    (version "1.8.8")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-                "1hvsazms1bfd769q0ngl0r9g5i4m9mpz9jmvvrdzyzk3rfa2ljiv"))))
+               "1xasrh9zxhgj2n5n8dvpzbwn1mzpmlzy270xhbq2gl8xk2xy4pc9"))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("libgpg-error-host" ,libgpg-error)))
@@ -175,7 +193,7 @@ generation.")
 (define-public libassuan
   (package
     (name "libassuan")
-    (version "2.5.4")
+    (version "2.5.5")
     (source
      (origin
       (method url-fetch)
@@ -183,11 +201,10 @@ generation.")
                           version ".tar.bz2"))
       (sha256
        (base32
-        "1w7vnnycq4z7gf4bk38pi4hrb8qrrzgfpz3cd7frwldxnfbfx060"))))
+        "1r1lvcp67gn5lfrj1g388sd77ca6qwnmxndirdysd71gk362z34f"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("libgpg-error" ,libgpg-error)
-       ("pth" ,pth)))
+     (list libgpg-error pth))
     (home-page "https://gnupg.org")
     (synopsis
      "IPC library used by GnuPG and related software")
@@ -203,7 +220,7 @@ provided.")
 (define-public libksba
   (package
     (name "libksba")
-    (version "1.5.0")
+    (version "1.6.0")
     (source
      (origin
       (method url-fetch)
@@ -212,12 +229,12 @@ provided.")
             version ".tar.bz2"))
       (sha256
        (base32
-        "1fm0mf3wq9fmyi1rmc1vk2fafn6liiw2mgxml3g7ybbb44lz2jmf"))))
+        "12x40y9ihs8nw2xs2y2vjfw90mhikbm5rvabma0dh5frybk87mns"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (native-inputs
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (arguments
      `(#:configure-flags
        (list ,@(if (%current-target-system)
@@ -262,7 +279,7 @@ compatible to GNU Pth.")
 (define-public gnupg
   (package
     (name "gnupg")
-    (version "2.2.29")
+    (version "2.2.30")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
@@ -270,22 +287,22 @@ compatible to GNU Pth.")
               (patches (search-patches "gnupg-default-pinentry.patch"))
               (sha256
                (base32
-                "1j8cpp08zlz9a9n4g9z6352m1bvl369r94p4pjg8z0948pdprl1r"))))
+                "1111ry31gaxv76miqsy6l0kwxwlx8sz0jk41jhyrjwx649p6sqyc"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("gnutls" ,gnutls)
-       ("libassuan" ,libassuan)
-       ("libgcrypt" ,libgcrypt)
-       ("libgpg-error" ,libgpg-error)
-       ("libksba" ,libksba)
-       ("npth" ,npth)
-       ("openldap" ,openldap)
-       ("pcsc-lite" ,pcsc-lite)
-       ("readline" ,readline)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+     (list gnutls
+           libassuan
+           libgcrypt
+           libgpg-error
+           libksba
+           npth
+           openldap
+           pcsc-lite
+           readline
+           sqlite
+           zlib))
    (arguments
     `(#:configure-flags '(;; Otherwise, the test suite looks for the `gpg`
                           ;; executable in its installation directory in
@@ -299,14 +316,12 @@ compatible to GNU Pth.")
             (substitute* "scd/scdaemon.c"
               (("\"(libpcsclite\\.so[^\"]*)\"" _ name)
                (string-append "\"" (assoc-ref inputs "pcsc-lite")
-                              "/lib/" name "\"")))
-            #t))
+                              "/lib/" name "\"")))))
         (add-after 'build 'patch-scheme-tests
           (lambda _
             (substitute* (find-files "tests" ".\\.scm$")
               (("/usr/bin/env gpgscm")
-               (string-append (getcwd) "/tests/gpgscm/gpgscm")))
-            #t))
+               (string-append (getcwd) "/tests/gpgscm/gpgscm")))))
         (add-before 'build 'patch-test-paths
           (lambda _
             (substitute* '("tests/inittests"
@@ -318,8 +333,7 @@ compatible to GNU Pth.")
             (substitute* "common/t-exectool.c"
               (("/bin/cat") (which "cat"))
               (("/bin/true") (which "true"))
-              (("/bin/false") (which "false")))
-            #t)))))
+              (("/bin/false") (which "false"))))))))
     (home-page "https://gnupg.org/")
     (synopsis "GNU Privacy Guard")
     (description
@@ -333,6 +347,25 @@ libskba (working with X.509 certificates and CMS data).")
     (properties '((ftp-server . "ftp.gnupg.org")
                   (ftp-directory . "/gcrypt/gnupg")))))
 
+(define-public gnupg-2.2.32
+  (package
+    (inherit gnupg)
+    (version "2.2.32")
+
+    ;; Hide this version because packages like 'emacs-pinentry' propagate the
+    ;; default GnuPG and "guix install gnupg emacs-pinentry" would fail with a
+    ;; collision error.
+    (properties `((hidden? . #t)
+                  ,@(package-properties gnupg)))
+
+    (source (origin
+              (inherit (package-source gnupg))
+              (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
+                                  ".tar.bz2"))
+              (sha256
+               (base32
+                "0506gv54z10c96z5821z9p0ksibk1pfilsmag39ffqrcz0sinmxj"))))))
+
 (define-public gnupg-1
   (package (inherit gnupg)
     (version "1.4.23")
@@ -342,14 +375,11 @@ libskba (working with X.509 certificates and CMS data).")
                                   ".tar.bz2"))
               (sha256
                (base32
-                "1fkq4sqldvf6a25mm2qz95swv1qjg464736091w51djiwqbjyin9"))))
+                "1fkq4sqldvf6a25mm2qz95swv1qjg464736091w51djiwqbjyin9"))
+              (patches (search-patches "gnupg-1-build-with-gcc10.patch"))))
     (native-inputs '())
     (inputs
-     `(("zlib" ,zlib)
-       ("bzip2" ,bzip2)
-       ("curl" ,curl)
-       ("readline" ,readline)
-       ("libgpg-error" ,libgpg-error)))
+     (list zlib bzip2 curl readline libgpg-error))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -371,12 +401,12 @@ libskba (working with X.509 certificates and CMS data).")
        (base32 "1bg13l5s8x9p1v0jyv29n84bay27pflindpzjsc9gj7i4wdkrg7f"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("gnupg" ,gnupg)))
+     (list gnupg))
     (propagated-inputs
      ;; Needs to be propagated because gpgme.h includes gpg-error.h.
-     `(("libgpg-error" ,libgpg-error)))
+     (list libgpg-error))
     (inputs
-     `(("libassuan" ,libassuan)))
+     (list libassuan))
     (home-page "https://www.gnupg.org/related_software/gpgme/")
     (synopsis "Library providing simplified access to GnuPG functionality")
     (description
@@ -410,12 +440,15 @@ and every application benefits from this.")
              (chdir "lang/qt")
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ,@(package-native-inputs gpgme)))
+     ;; Use GnuPG 2.2.32.  With 2.2.30, 'testSymmetricEncryptDecrypt' in
+     ;; t-encrypt.cpp fails because 'gpg' wrongfully ask for a passphrase do
+     ;; decrypt the cypher text.
+     (modify-inputs (package-native-inputs gpgme)
+       (replace "gnupg" gnupg-2.2.32)
+       (prepend pkg-config)))
     (inputs
-     `(("gpgme" ,gpgme)
-       ("qtbase" ,qtbase-5)
-       ,@(package-inputs gpgme)))
+     (modify-inputs (package-inputs gpgme)
+       (prepend gpgme qtbase-5)))
     (synopsis "Qt API bindings for gpgme")
     (description "QGpgme provides a very high level Qt API around GpgMEpp.
 
@@ -451,17 +484,14 @@ gpgpme starting with version 1.7.")
                ;; When cross-compiling, the bash script 'libgcrypt-config'
                ;; must be accessible during the configure phase.
                (setenv "PATH"
-                       (string-append (assoc-ref inputs "libgcrypt")
-                                      "/bin:" (getenv "PATH")))))))))
+                       (string-append
+                        (dirname
+                         (search-input-file inputs "bin/libgcrypt-config"))
+                        ":" (getenv "PATH")))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("texinfo" ,texinfo)
-       ("guile" ,guile-3.0)))
+     (list pkg-config autoconf automake texinfo guile-3.0))
     (inputs
-     `(("guile" ,guile-3.0)
-       ("libgcrypt" ,libgcrypt)))
+     (list guile-3.0 libgcrypt))
     (synopsis "Cryptography library for Guile using Libgcrypt")
     (description
      "Guile-Gcrypt provides a Guile interface to a subset of the
@@ -475,22 +505,22 @@ interface (FFI) of Guile.")
   (package (inherit guile-gcrypt)
     (name "guile2.0-gcrypt")
     (native-inputs
-     `(("guile" ,guile-2.0)
-       ,@(alist-delete "guile" (package-native-inputs guile-gcrypt))))
+     (modify-inputs (package-native-inputs guile-gcrypt)
+       (replace "guile" guile-2.0)))
     (inputs
-     `(("guile" ,guile-2.0)
-       ,@(alist-delete "guile" (package-inputs guile-gcrypt))))))
+     (modify-inputs (package-inputs guile-gcrypt)
+       (replace "guile" guile-2.0)))))
 
 (define-public guile2.2-gcrypt
   (package
     (inherit guile-gcrypt)
     (name "guile2.2-gcrypt")
     (native-inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-native-inputs guile-gcrypt))))
+     (modify-inputs (package-native-inputs guile-gcrypt)
+       (replace "guile" guile-2.2)))
     (inputs
-     `(("guile" ,guile-2.2)
-       ,@(alist-delete "guile" (package-inputs guile-gcrypt))))))
+     (modify-inputs (package-inputs guile-gcrypt)
+       (replace "guile" guile-2.2)))))
 
 (define-public python-gpg
   (package
@@ -513,9 +543,9 @@ interface (FFI) of Guile.")
              #t)))
        #:tests? #f)) ; No test suite.
     (inputs
-     `(("gpgme" ,gpgme)))
+     (list gpgme))
     (native-inputs
-     `(("swig" ,swig)))
+     (list swig))
     (home-page (package-home-page gpgme))
     (synopsis "Python bindings for GPGME GnuPG cryptography library")
     (description "This package provides Python bindings to the GPGME GnuPG
@@ -551,9 +581,9 @@ distributed separately.")
            (lambda _ (invoke "make" "check"))))))
     (build-system python-build-system)
     (native-inputs
-     `(("gnupg" ,gnupg-1)))
+     (list gnupg-1))
     (inputs
-     `(("gpgme" ,gpgme)))
+     (list gpgme))
     (home-page "https://launchpad.net/pygpgme")
     (synopsis "Python module for working with OpenPGP messages")
     (description
@@ -592,7 +622,7 @@ decrypt messages using the OpenPGP format by making use of GPGME.")
                (invoke "python"
                        "test_gnupg.py" "--no-doctests")))))))
     (native-inputs
-     `(("gnupg" ,gnupg)))
+     (list gnupg))
     (home-page "https://pythonhosted.org/python-gnupg/index.html")
     (synopsis "Wrapper for the GNU Privacy Guard")
     (description
@@ -624,14 +654,11 @@ and signature functionality from Python programs.")
              (delete-file "t/encrypt_symmetrically.t")
              #t)))))
     (inputs
-     `(("gnupg" ,gnupg-1)))
+     (list gnupg-1))
     (propagated-inputs
-     `(("perl-moo" ,perl-moo)
-       ("perl-moox-handlesvia" ,perl-moox-handlesvia)
-       ("perl-moox-late" ,perl-moox-late)))
+     (list perl-moo perl-moox-handlesvia perl-moox-late))
     (native-inputs
-     `(("which" ,which)
-       ("perl-module-install" ,perl-module-install)))
+     (list which perl-module-install))
     (home-page "https://metacpan.org/release/GnuPG-Interface")
     (synopsis "Perl interface to GnuPG")
     (description "@code{GnuPG::Interface} and its associated modules are
@@ -664,8 +691,7 @@ signing, decryption, verification, and key-listing parsing.")
         (add-before
          'build 'set-gpg-file-name
          (lambda* (#:key inputs outputs #:allow-other-keys)
-           (let* ((gpg (string-append (assoc-ref inputs "gpg")
-                                      "/bin/gpg")))
+           (let* ((gpg (search-input-file inputs "/bin/gpg")))
              (substitute* "libpius/constants.py"
                (("/usr/bin/gpg2") gpg))
              #t))))))
@@ -702,12 +728,12 @@ PGP keysigning parties.")
      ;; 'configure phase.
      `(("autoconf" ,autoconf-wrapper)
        ("automake" ,automake)))
-    (inputs `(("perl" ,perl)
-              ("perl-text-template" ,perl-text-template)
-              ("perl-mime-tools" ,perl-mime-tools)
-              ("perl-gnupg-interface" ,perl-gnupg-interface)
-              ("perl-net-idn-encode" ,perl-net-idn-encode)
-              ("libmd" ,libmd)))
+    (inputs (list perl
+                  perl-text-template
+                  perl-mime-tools
+                  perl-gnupg-interface
+                  perl-net-idn-encode
+                  libmd))
     (arguments
      `(#:tests? #f ; no test suite
        #:phases
@@ -802,11 +828,10 @@ including tools for signing keys, keyring analysis, and party preparation.
     (arguments
      `(#:configure-flags '("--enable-pinentry-tty")))
     (inputs
-     `(("ncurses" ,ncurses)
-       ("libassuan" ,libassuan)
-       ("libsecret" ,libsecret "out")))
+     (list ncurses libassuan
+           `(,libsecret "out")))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (home-page "https://gnupg.org/aegypten2/")
     (synopsis "GnuPG's interface to passphrase input")
     (description
@@ -834,9 +859,8 @@ enter a passphrase when required by @code{gpg} or other software.")))
     (arguments
      `(#:configure-flags '("--enable-fallback-curses")))
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("glib" ,glib)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend gtk+-2 glib)))
     (description
      "Pinentry provides a console and a GTK+ GUI that allows users to enter a
 passphrase when @code{gpg} is run and needs it.")))
@@ -846,10 +870,8 @@ passphrase when @code{gpg} is run and needs it.")))
     (inherit pinentry-tty)
     (name "pinentry-gnome3")
     (inputs
-     `(("gtk+" ,gtk+-2)
-       ("gcr" ,gcr)
-       ("glib" ,glib)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend gtk+-2 gcr glib)))
     (arguments
      `(#:configure-flags '("--enable-pinentry-gnome3"
                            "--enable-fallback-curses")))
@@ -865,8 +887,8 @@ software.")))
     (arguments
      `(#:configure-flags '("--enable-fallback-curses")))
     (inputs
-     `(("qtbase" ,qtbase-5)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend qtbase-5)))
   (description
    "Pinentry provides a console and a Qt GUI that allows users to enter a
 passphrase when @code{gpg} is run and needs it.")))
@@ -889,8 +911,8 @@ passphrase when @code{gpg} is run and needs it.")))
        ("gettext" ,gettext-minimal)
        ,@(package-native-inputs pinentry-tty)))
     (inputs
-     `(("efl" ,efl)
-       ,@(package-inputs pinentry-tty)))
+     (modify-inputs (package-inputs pinentry-tty)
+       (prepend efl)))
     (description
    "Pinentry provides a console and a graphical interface for @acronym{EFL,
 the Enlightenment Foundation Libraries} that allows users to enter a
@@ -933,13 +955,8 @@ passphrase when @code{gpg} is run and needs it.")))
            (lambda* rest
              (invoke "make" "installcheck"))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("autoconf-archive" ,autoconf-archive)
-       ("automake" ,automake)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs `(("guile" ,guile-3.0)
-              ("rofi" ,rofi)))
+     (list autoconf autoconf-archive automake pkg-config texinfo))
+    (inputs (list guile-3.0 rofi))
     (synopsis "Rofi GUI for GnuPG's passphrase input")
     (description "Pinentry-rofi is a simple graphical user interface for
 passphrase or PIN when required by @code{gpg} or other software.  It is using
@@ -963,12 +980,9 @@ with @code{rofi-pass} a good front end for @code{password-store}.")
         (base32 "1faxaydhc9lr97b2r3sylcy320bn54g4a5p727y3227mz3gg1mn1"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
-     `(("bemenu" ,bemenu)
-       ("libassuan" ,libassuan)
-       ("libgpg-error" ,libgpg-error)
-       ("popt" ,popt)))
+     (list bemenu libassuan libgpg-error popt))
     (home-page "https://github.com/t-8ch/pinentry-bemenu")
     (synopsis "Pinentry implementation based on @code{bemenu}")
     (description
@@ -1029,7 +1043,7 @@ them to transform your existing public key into a secret key.")
        #:make-flags (list ,(string-append "CC=" (cc-for-target))
                           (string-append "DESTDIR=" (assoc-ref %outputs "out")))))
     (inputs
-     `(("zlib" ,zlib)))
+     (list zlib))
     (home-page "https://www.mew.org/~kazu/proj/pgpdump/en/")
     (synopsis "PGP packet visualizer")
     (description "pgpdump displays the sequence of OpenPGP or PGP version 2
@@ -1062,7 +1076,7 @@ however, pgpdump produces more detailed and easier to understand output.")
                  `("PATH" ":" prefix (,(string-append gnupg "/bin"))))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     (list pkg-config))
     (inputs
      `(("gnupg" ,gnupg)
        ("gpgme" ,gpgme)
@@ -1131,7 +1145,7 @@ files, to verify signatures, and to manage the private and public keys.")
        ("perl-xml-twig" ,perl-xml-twig)
        ("torsocks" ,torsocks)))
     (native-inputs
-     `(("xorg-server" ,xorg-server-for-tests)))
+     (list xorg-server-for-tests))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1193,8 +1207,7 @@ over.")
          (delete 'configure) ; no configure script
          (add-before 'install 'hardlink-gnupg
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((gpg (string-append (assoc-ref inputs "gnupg")
-                                       "/bin/gpg")))
+             (let ((gpg (search-input-file inputs "/bin/gpg")))
                (substitute* (find-files "." "jetring-[[:alpha:]]+$")
                  (("gpg -") (string-append gpg " -"))
                  (("\\\"gpg\\\"") (string-append "\"" gpg "\"")))
@@ -1213,8 +1226,7 @@ over.")
                #t))))
        #:tests? #f)) ; no test phase
     (inputs
-     `(("gnupg" ,gnupg)
-       ("perl" ,perl)))
+     (list gnupg perl))
     (home-page "https://joeyh.name/code/jetring/")
     (synopsis "GnuPG keyring maintenance using changesets")
     (description