diff options
author | Simon Streit <simon@netpanic.org> | 2021-12-30 19:39:48 +0100 |
---|---|---|
committer | Simon Streit <simon@netpanic.org> | 2021-12-30 19:39:48 +0100 |
commit | ce97965d5fb59b307cb1679844768937eda284f7 (patch) | |
tree | 13e9d1c10dd9f259a230a1ae03cfcf22c57d747c | |
parent | 6beb95edbd036964f70029f757bb2f8e7037184b (diff) |
siguix: Add emacs-lucid.
* siguix/packages/emacs.scm (emacs-lucid): New variable.
-rw-r--r-- | siguix/packages/emacs.scm | 266 |
1 files changed, 266 insertions, 0 deletions
diff --git a/siguix/packages/emacs.scm b/siguix/packages/emacs.scm new file mode 100644 index 0000000..6c4e2d9 --- /dev/null +++ b/siguix/packages/emacs.scm @@ -0,0 +1,266 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019, 2021 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2014 Taylan Ulrich Bayirli/Kammer <taylanbayirli@gmail.com> +;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2014, 2015, 2016, 2017 Alex Kost <alezost@gmail.com> +;;; Copyright © 2016, 2018 Arun Isaac <arunisaac@systemreboot.net> +;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch> +;;; Copyright © 2016 David Thompson <dthompson2@worcester.edu> +;;; Copyright © 2016 Nikita <nikita@n0.is> +;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com> +;;; Copyright © 2017, 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com> +;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org> +;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com> +;;; Copyright © 2018, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2019 Jesse John Gildersleve <jessejohngildersleve@zohomail.eu> +;;; Copyright © 2019 Valentin Ignatev <valentignatev@gmail.com> +;;; Copyright © 2019, 2021 Liliana Marie Prikler <liliana.prikler@gmail.com> +;;; Copyright © 2019 Amin Bandali <bandali@gnu.org> +;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us> +;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com> +;;; Copyright © 2021 Simon Streit <simon@netpanic.org> +;;; +;;; This file is not part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (siguix packages emacs) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix build-system gnu) + #:use-module (guix build-system glib-or-gtk) + #:use-module (gnu packages) + #:use-module (gnu packages emacs) + #:use-module (gnu packages acl) + #:use-module (gnu packages autotools) + #:use-module (gnu packages base) + #:use-module (gnu packages compression) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages fribidi) + #:use-module (gnu packages gd) + #:use-module (gnu packages gettext) + #:use-module (gnu packages ghostscript) + #:use-module (gnu packages glib) + #:use-module (gnu packages gnome) ; for librsvg + #:use-module (gnu packages gtk) + #:use-module (gnu packages guile) + #:use-module (gnu packages image) + #:use-module (gnu packages linux) ; alsa-lib, gpm + #:use-module (gnu packages mail) ; for mailutils + #:use-module (gnu packages multiprecision) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages pdf) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages texinfo) + #:use-module (gnu packages tls) + #:use-module (gnu packages web) ; for jansson + #:use-module (gnu packages webkit) + #:use-module (gnu packages xml) + #:use-module (gnu packages xorg) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1)) + +(define-public emacs-lucid + (package/inherit emacs + (name "emacs-lucid") + (arguments + `(#:tests? #f ; no check target + #:configure-flags (list "--with-modules" + ;; "--with-cairo" + ;; "--disable-build-details" + "--with-x-toolkit=lucid" + "--without-gconf" + "--without-gsettings" + ) + #: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"))) + + ;; 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]+)*)?$")) + #t))) + (add-before 'reset-gzip-timestamps 'make-compressed-files-writable + ;; The 'reset-gzip-timestamps phase will throw a permission error + ;; if gzip files aren't writable then. This phase is needed when + ;; building from a git checkout. + (lambda _ + (for-each make-file-writable + (find-files %output ".*\\.t?gz$")) + #t))))) + (inputs + `(("gnutls" ,gnutls) + ("ncurses" ,ncurses) + + ;; Required for "core" functionality, such as dired and compression. + ("coreutils" ,coreutils) + ("gzip" ,gzip) + + ;; Avoid Emacs's limited movemail substitute that retrieves POP3 email + ;; only via insecure channels. This is not needed for (modern) IMAP. + ("mailutils" ,mailutils) + + ;; TODO: Add the optional dependencies. + ("gpm" ,gpm) + ("libx11" ,libx11) + ("libxaw" ,libxaw) + ("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) + + ;; 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) + + ;; multilingualization support + ("libotf" ,libotf) + ("m17n-lib" ,m17n-lib))))) |