From patchwork Sun Apr 10 11:28:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Liliana Marie Prikler X-Patchwork-Id: 38481 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id C7AB627BBEA; Sun, 10 Apr 2022 12:37:32 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id C853227BBE9 for ; Sun, 10 Apr 2022 12:37:31 +0100 (BST) Received: from localhost ([::1]:37090 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ndVso-0002ES-WC for patchwork@mira.cbaines.net; Sun, 10 Apr 2022 07:37:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51306) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ndVsN-0001vi-6V for guix-patches@gnu.org; Sun, 10 Apr 2022 07:37:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:45663) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ndVsM-0000Xl-Tz for guix-patches@gnu.org; Sun, 10 Apr 2022 07:37:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ndVsM-00080w-RZ for guix-patches@gnu.org; Sun, 10 Apr 2022 07:37:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#54829] [PATCH v2 2/3] gnu: emacs: Use new package style. References: In-Reply-To: Resent-From: Liliana Marie Prikler Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sun, 10 Apr 2022 11:37:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 54829 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Maxime Devos , 54829@debbugs.gnu.org Received: via spool by 54829-submit@debbugs.gnu.org id=B54829.164959059630754 (code B ref 54829); Sun, 10 Apr 2022 11:37:02 +0000 Received: (at 54829) by debbugs.gnu.org; 10 Apr 2022 11:36:36 +0000 Received: from localhost ([127.0.0.1]:39557 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ndVrv-0007zw-Mc for submit@debbugs.gnu.org; Sun, 10 Apr 2022 07:36:36 -0400 Received: from mail-ed1-f68.google.com ([209.85.208.68]:37734) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ndVrr-0007zF-P9 for 54829@debbugs.gnu.org; Sun, 10 Apr 2022 07:36:32 -0400 Received: by mail-ed1-f68.google.com with SMTP id b15so15010156edn.4 for <54829@debbugs.gnu.org>; Sun, 10 Apr 2022 04:36:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:date:subject:mime-version:to:content-transfer-encoding :message-id; bh=w7NnqLClSceE2MYm/QWhjXnZFt2xMKq51UFew9IDi8w=; b=CLLfQUXhuZmXJURwSbHa8jHIxy9ZowtcadNKz4c5yOs+8hPbbTI00DalfcQS4allwu 26yIuI73ZLdRU44YgVsioYBf2/0c2bjp9EV1U0THpW6gxzYsvxRfjtb8AXrUlvmXlGVJ MxIbJv+nHCbID1p4TLnO768egZlTntXEHNkxyZdY8IkLkEmJ0qJzrgL1aOmVDI27RpdT +p38gVsGwjLFuRWYCteiW9kFL5MF38I23Oum5rDrqTqh5dqhDpbsu7JZ4tl+CyoTaC+K 4sSsxBCPXaIg2SQ4x0oyHIDHSL+r85aP7Bn6EfmNIR8/e/c/SHQCSPZfLbcMqFX+AltG Pylw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:date:subject:mime-version:to :content-transfer-encoding:message-id; bh=w7NnqLClSceE2MYm/QWhjXnZFt2xMKq51UFew9IDi8w=; b=5BH/yhJ4jB4E8x+Gj9gOb26sbswyV8ugXMrtXoKF6wD53swt6Rir6nvxcuC+0eY3Gq 6kDRp57pvwo151TQ9Z3xiuOLYVpeDTg7Tq371fSeSSHGX18N8TzTOL+/1OCfgNoIWyU3 schgGORKuOBWAz3WcSoFqyz1O1rUKPoGwVz6Z6ONxdHdwYtANoR7u1xgGuNi+kqd1tf6 a0BErl19T1xNrilMJajULihwbNS1ozKcs1DpfDv90BjsD3XiFo82vU8xQ7N8iNjKG/cD CzoIQVQwcfvmloceeA3pQ2SVB0oZjpsEjF9/TuPmgCzfeUqX3XXzAWeTqqNiGnYUHpe7 uOyA== X-Gm-Message-State: AOAM531UoHXyoNIFB15rj/gGoZ89sq1fANRWBo3cKYL+swrt7RKN9PgW kPQGma09ba7hlWSxJtRxPGg0++szZF4= X-Google-Smtp-Source: ABdhPJwAfNgzM8ojmwBhuaMh5yjLPqU0lykRirM8EW2qF/Lrt2v2IFgHycuDDY4zTj2RseaEd8UHvA== X-Received: by 2002:a05:6402:50d0:b0:419:7df9:55c8 with SMTP id h16-20020a05640250d000b004197df955c8mr27764153edb.79.1649590585830; Sun, 10 Apr 2022 04:36:25 -0700 (PDT) Received: from nijino.fritz.box (85-127-52-93.dsl.dynamic.surfer.at. [85.127.52.93]) by smtp.gmail.com with ESMTPSA id q16-20020a056402519000b0041d77e14005sm913302edd.82.2022.04.10.04.36.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 Apr 2022 04:36:25 -0700 (PDT) From: Liliana Marie Prikler Date: Sun, 10 Apr 2022 13:28:05 +0200 MIME-Version: 1.0 Message-ID: <3ea8d086e75ff361c82e774c71fdfcacfa78fddd.camel@gmail.com> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/packages/emacs.scm (emacs)[arguments]: Convert to list of G-Expressions. Use ‘search-input-file’ where possible. Inline references to auxiliary files. [inputs, native-inputs]: Drop labels. --- gnu/packages/emacs.scm | 326 ++++++++++++++++++++--------------------- 1 file changed, 162 insertions(+), 164 deletions(-) diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 7d791250d2..ae062dadf1 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -41,6 +41,7 @@ (define-module (gnu packages emacs) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) + #:use-module (guix gexp) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix build-system gnu) @@ -51,6 +52,7 @@ (define-module (gnu packages emacs) #:use-module (gnu packages base) #:use-module (gnu packages compression) #:use-module (gnu packages fontutils) + #:use-module (gnu packages freedesktop) #:use-module (gnu packages fribidi) #:use-module (gnu packages gd) #:use-module (gnu packages gettext) @@ -123,179 +125,175 @@ (define-public emacs #t)))) (build-system glib-or-gtk-build-system) (arguments - `(#:tests? #f ; no check target - #:configure-flags (list "--with-modules" - "--with-cairo" - "--disable-build-details") - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'patch-program-file-names - (lambda* (#:key inputs #:allow-other-keys) - (substitute* '("src/callproc.c" - "lisp/term.el" - "lisp/htmlfontify.el" - "lisp/textmodes/artist.el" - "lisp/progmodes/sh-script.el") - (("\"/bin/sh\"") - (format #f "~s" (which "sh")))) - (substitute* "lisp/doc-view.el" - (("\"(gs|dvipdf|ps2pdf)\"" all what) - (let ((ghostscript (assoc-ref inputs "ghostscript"))) - (if ghostscript - (string-append "\"" ghostscript "/bin/" what "\"") - all))) - (("\"(pdftotext)\"" all what) - (let ((poppler (assoc-ref inputs "poppler"))) - (if poppler - (string-append "\"" poppler "/bin/" what "\"") - all)))) - ;; match ".gvfs-fuse-daemon-real" and ".gvfsd-fuse-real" - ;; respectively when looking for GVFS processes. - (substitute* "lisp/net/tramp-gvfs.el" - (("\\(tramp-compat-process-running-p \"(.*)\"\\)" all process) - (format #f "(or ~a (tramp-compat-process-running-p ~s))" - all (string-append "." process "-real")))) - #t)) - (add-before 'configure 'fix-/bin/pwd - (lambda _ - ;; Use `pwd', not `/bin/pwd'. - (substitute* (find-files "." "^Makefile\\.in$") - (("/bin/pwd") - "pwd")) - #t)) - (add-after 'install 'install-site-start - ;; Use 'guix-emacs' in "site-start.el", which is used autoload the - ;; Elisp packages found in EMACSLOADPATH. - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (lisp-dir (string-append out "/share/emacs/site-lisp")) - (emacs (string-append out "/bin/emacs"))) + (list + #:tests? #f ; no check target + #:configure-flags #~(list "--with-modules" + "--with-cairo" + "--disable-build-details") + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-program-file-names + (lambda* (#:key inputs #:allow-other-keys) + (substitute* '("src/callproc.c" + "lisp/term.el" + "lisp/htmlfontify.el" + "lisp/textmodes/artist.el" + "lisp/progmodes/sh-script.el") + (("\"/bin/sh\"") + (format #f "~s" (search-input-file inputs "/bin/sh")))) + (substitute* "lisp/doc-view.el" + (("\"(gs|dvipdf|ps2pdf|pdftotext)\"" all what) + (let ((replacement (search-input-file + inputs + (string-append "/bin/" what)))) + (if replacement + (string-append "\"" replacement "\"") + all)))) + ;; match ".gvfs-fuse-daemon-real" and ".gvfsd-fuse-real" + ;; respectively when looking for GVFS processes. + (substitute* "lisp/net/tramp-gvfs.el" + (("\\(tramp-compat-process-running-p \"(.*)\"\\)" all process) + (format #f "(or ~a (tramp-compat-process-running-p ~s))" + all (string-append "." process "-real")))))) + (add-before 'configure 'fix-/bin/pwd + (lambda _ + ;; Use `pwd', not `/bin/pwd'. + (substitute* (find-files "." "^Makefile\\.in$") + (("/bin/pwd") + "pwd")))) + (add-after 'install 'install-site-start + ;; Use 'guix-emacs' in "site-start.el", which is used autoload the + ;; Elisp packages found in EMACSLOADPATH. + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (lisp-dir (string-append out "/share/emacs/site-lisp")) + (emacs (string-append out "/bin/emacs"))) - ;; This is duplicated from emacs-utils to prevent coupling. - (define* (emacs-byte-compile-directory dir) - (let ((expr `(progn - (setq byte-compile-debug t) - (byte-recompile-directory - (file-name-as-directory ,dir) 0 1)))) - (invoke emacs "--quick" "--batch" - (format #f "--eval=~s" expr)))) + ;; This is duplicated from emacs-utils to prevent coupling. + (define* (emacs-byte-compile-directory dir) + (let ((expr `(progn + (setq byte-compile-debug t) + (byte-recompile-directory + (file-name-as-directory ,dir) 0 1)))) + (invoke emacs "--quick" "--batch" + (format #f "--eval=~s" expr)))) - (copy-file (assoc-ref inputs "guix-emacs.el") - (string-append lisp-dir "/guix-emacs.el")) - (with-output-to-file (string-append lisp-dir "/site-start.el") - (lambda () - (display - (string-append - "(when (require 'guix-emacs nil t)\n" - " (guix-emacs-autoload-packages)\n" - " (advice-add 'package-load-all-descriptors" - " :after #'guix-emacs-load-package-descriptors))")))) - ;; Remove the extraneous subdirs.el file, as it causes Emacs to - ;; add recursively all the the sub-directories of a profile's - ;; share/emacs/site-lisp union when added to EMACSLOADPATH, - ;; which leads to conflicts. - (delete-file (string-append lisp-dir "/subdirs.el")) - ;; Byte compile the site-start files. - (emacs-byte-compile-directory lisp-dir)) - #t)) - (add-after 'glib-or-gtk-wrap 'restore-emacs-pdmp - ;; restore the dump file that Emacs installs somewhere in - ;; libexec/ to its original state - (lambda* (#:key outputs target #:allow-other-keys) - (let* ((libexec (string-append (assoc-ref outputs "out") - "/libexec")) - ;; each of these ought to only match a single file, - ;; but even if not (find-files) sorts by string<, - ;; so the Nth element in one maps to the Nth element of - ;; the other - (pdmp (find-files libexec "\\.pdmp$")) - (pdmp-real (find-files libexec "\\.pdmp-real$"))) - (for-each rename-file pdmp-real pdmp)))) - (add-after 'glib-or-gtk-wrap 'strip-double-wrap - (lambda* (#:key outputs #:allow-other-keys) - ;; Directly copy emacs-X.Y to emacs, so that it is not wrapped - ;; twice. This also fixes a minor issue, where WMs would not be - ;; able to track emacs back to emacs.desktop. - (with-directory-excursion (assoc-ref outputs "out") - (copy-file - (car (find-files "bin" "^emacs-([0-9]+\\.)+[0-9]+$")) - "bin/emacs") - #t))) - (add-after 'strip-double-wrap 'wrap-emacs-paths - (lambda* (#:key inputs outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (lisp-dirs (find-files (string-append out "/share/emacs") - "^lisp$" - #:directories? #t))) - (for-each - (lambda (prog) - (wrap-program prog - ;; emacs-next and variants rely on uname being in PATH for - ;; Tramp. Tramp paths can't be hardcoded, because they - ;; need to be portable. - `("PATH" suffix - ,(map (lambda (in) (string-append in "/bin")) - (list (assoc-ref inputs "gzip") - (assoc-ref inputs "coreutils")))) - `("EMACSLOADPATH" suffix ,lisp-dirs))) - (find-files (string-append out "/bin") - ;; Matches versioned and unversioned emacs binaries. - ;; We don't patch emacsclient, because it takes its - ;; environment variables from emacs. - ;; Likewise, we don't need to patch helper binaries - ;; like etags, ctags or ebrowse. - "^emacs(-[0-9]+(\\.[0-9]+)*)?$")))))))) + (copy-file #$(local-file + (search-auxiliary-file "emacs/guix-emacs.el")) + (string-append lisp-dir "/guix-emacs.el")) + (with-output-to-file (string-append lisp-dir "/site-start.el") + (lambda () + (display + (string-append + "(when (require 'guix-emacs nil t)\n" + " (guix-emacs-autoload-packages)\n" + " (advice-add 'package-load-all-descriptors" + " :after #'guix-emacs-load-package-descriptors))")))) + ;; Remove the extraneous subdirs.el file, as it causes Emacs to + ;; add recursively all the the sub-directories of a profile's + ;; share/emacs/site-lisp union when added to EMACSLOADPATH, + ;; which leads to conflicts. + (delete-file (string-append lisp-dir "/subdirs.el")) + ;; Byte compile the site-start files. + (emacs-byte-compile-directory lisp-dir)) + #t)) + (add-after 'glib-or-gtk-wrap 'restore-emacs-pdmp + ;; restore the dump file that Emacs installs somewhere in + ;; libexec/ to its original state + (lambda* (#:key outputs target #:allow-other-keys) + (let* ((libexec (string-append (assoc-ref outputs "out") + "/libexec")) + ;; each of these ought to only match a single file, + ;; but even if not (find-files) sorts by string<, + ;; so the Nth element in one maps to the Nth element of + ;; the other + (pdmp (find-files libexec "\\.pdmp$")) + (pdmp-real (find-files libexec "\\.pdmp-real$"))) + (for-each rename-file pdmp-real pdmp)))) + (add-after 'glib-or-gtk-wrap 'strip-double-wrap + (lambda* (#:key outputs #:allow-other-keys) + ;; Directly copy emacs-X.Y to emacs, so that it is not wrapped + ;; twice. This also fixes a minor issue, where WMs would not be + ;; able to track emacs back to emacs.desktop. + (with-directory-excursion (assoc-ref outputs "out") + (copy-file + (car (find-files "bin" "^emacs-([0-9]+\\.)+[0-9]+$")) + "bin/emacs") + #t))) + (add-after 'strip-double-wrap 'wrap-emacs-paths + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (lisp-dirs (find-files (string-append out "/share/emacs") + "^lisp$" + #:directories? #t))) + (for-each + (lambda (prog) + (wrap-program prog + ;; emacs-next and variants rely on uname being in PATH for + ;; Tramp. Tramp paths can't be hardcoded, because they + ;; need to be portable. + `("PATH" suffix + ,(map dirname + (list (search-input-file inputs "/bin/gzip") + ;; for coreutils + (search-input-file inputs "/bin/yes")))) + `("EMACSLOADPATH" suffix ,lisp-dirs))) + (find-files (string-append out "/bin") + ;; Matches versioned and unversioned emacs binaries. + ;; We don't patch emacsclient, because it takes its + ;; environment variables from emacs. + ;; Likewise, we don't need to patch helper binaries + ;; like etags, ctags or ebrowse. + "^emacs(-[0-9]+(\\.[0-9]+)*)?$")))))))) (inputs - `(("gnutls" ,gnutls) - ("ncurses" ,ncurses) + (list gnutls + ncurses - ;; Required for "core" functionality, such as dired and compression. - ("coreutils" ,coreutils) - ("gzip" ,gzip) + ;; Required for "core" functionality, such as dired and compression. + coreutils + gzip - ;; Avoid Emacs's limited movemail substitute that retrieves POP3 email - ;; only via insecure channels. This is not needed for (modern) IMAP. - ("mailutils" ,mailutils) + ;; Avoid Emacs's limited movemail substitute that retrieves POP3 + ;; email only via insecure channels. + ;; This is not needed for (modern) IMAP. + mailutils - ;; TODO: Add the optional dependencies. - ("gpm" ,gpm) - ("libx11" ,libx11) - ("gtk+" ,gtk+) - ("cairo" ,cairo) - ("pango" ,pango) - ("harfbuzz" ,harfbuzz) - ("libxft" ,libxft) - ("libtiff" ,libtiff) - ("giflib" ,giflib) - ("libjpeg" ,libjpeg-turbo) - ("acl" ,acl) - ("jansson" ,jansson) - ("gmp" ,gmp) - ("ghostscript" ,ghostscript) - ("poppler" ,poppler) + ;; TODO: Add the optional dependencies. + gpm + libx11 + gtk+ + cairo + pango + harfbuzz + libxft + libtiff + giflib + libjpeg-turbo + acl + jansson + gmp + ghostscript + poppler - ;; When looking for libpng `configure' links with `-lpng -lz', so we - ;; must also provide zlib as an input. - ("libpng" ,libpng) - ("zlib" ,zlib) - ("librsvg" ,@(if (target-x86-64?) - (list librsvg-bootstrap) - (list librsvg-2.40))) - ("libxpm" ,libxpm) - ("libxml2" ,libxml2) - ("libice" ,libice) - ("libsm" ,libsm) - ("alsa-lib" ,alsa-lib) - ("dbus" ,dbus) + ;; When looking for libpng `configure' links with `-lpng -lz', so we + ;; must also provide zlib as an input. + libpng + zlib + (if (target-x86-64?) + librsvg-bootstrap + librsvg-2.40) + libxpm + libxml2 + libice + libsm + alsa-lib + dbus - ;; multilingualization support - ("libotf" ,libotf) - ("m17n-lib" ,m17n-lib))) + ;; multilingualization support + libotf + m17n-lib)) (native-inputs - `(("guix-emacs.el" ,(search-auxiliary-file "emacs/guix-emacs.el")) - ("pkg-config" ,pkg-config) - ("texinfo" ,texinfo))) - + (list pkg-config texinfo)) (native-search-paths (list (search-path-specification (variable "EMACSLOADPATH")