summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Streit <simon@netpanic.org>2021-12-30 19:39:48 +0100
committerSimon Streit <simon@netpanic.org>2021-12-30 19:39:48 +0100
commitce97965d5fb59b307cb1679844768937eda284f7 (patch)
tree13e9d1c10dd9f259a230a1ae03cfcf22c57d747c
parent6beb95edbd036964f70029f757bb2f8e7037184b (diff)
siguix: Add emacs-lucid.
* siguix/packages/emacs.scm (emacs-lucid): New variable.
-rw-r--r--siguix/packages/emacs.scm266
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)))))