From 36a09d185343375a5cba370431870f9c4435d623 Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Tue, 23 Apr 2019 02:35:03 -0400 Subject: gnu: emacs: Update to 27.1. * gnu/packages/emacs.scm (emacs): Update to 27.1. [source]: In snippet, use 'find-files' to find 'eshell/esh-groups.el' if it exists, but gracefully handle its absence. [arguments]: Add "--with-cairo" to configure-flags. Add 'restore-emacs-pdmp' and 'make-compressed-files-writable' phases. Explicitly return #t from 'install-site-start' phase. [inputs]: Add cairo, pango, harfbuzz, jansson, and gmp. Remove imagemagick. (emacs-next): Remove variable. (emacs-minimal, emacs-xwidgets): Use 'package/inherit'. [arguments]: Remove 'restore-emacs-pdmp' phase. (emacs-no-x): Use 'package/inherit'. [arguments]: Remove "--with-cairo" from configure-flags. Remove 'restore-emacs-pdmp' phase. [inputs]: Remove cairo, pango, and harfbuzz. (emacs-no-x-toolkit): Use 'package/inherit'. [arguments]: Remove 'restore-emacs-pdmp' phase. Remove superfluous quasiquote+unquote-splicing pair. (emacs-wide-int): Use 'package/inherit'. (guile-emacs): Use 'package/inherit'. [arguments]: Remove "--with-cairo" from configure-flags. Remove 'restore-emacs-pdmp' phase. * gnu/packages/patches/emacs-ignore-empty-xim-styles.patch, gnu/packages/patches/emacs-source-date-epoch.patch: Adapt to apply cleanly to emacs-27.1. * gnu/packages/patches/emacs-exec-path.patch: Replace with the previous contents of 'emacs27-exec-path.patch', but remove the superfluous comment about it being "like emacs-exec-path.patch, but for Emacs 27". * gnu/packages/patches/emacs27-exec-path.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove 'emacs27-exec-path.patch'. --- gnu/local.mk | 1 - gnu/packages/emacs.scm | 203 +++++++-------------- gnu/packages/patches/emacs-exec-path.patch | 22 +-- .../patches/emacs-ignore-empty-xim-styles.patch | 4 +- gnu/packages/patches/emacs-source-date-epoch.patch | 6 +- gnu/packages/patches/emacs27-exec-path.patch | 18 -- 6 files changed, 85 insertions(+), 169 deletions(-) delete mode 100644 gnu/packages/patches/emacs27-exec-path.patch (limited to 'gnu') diff --git a/gnu/local.mk b/gnu/local.mk index 9c54368eb3..d956e52d97 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -918,7 +918,6 @@ dist_patch_DATA = \ %D%/packages/patches/elixir-path-length.patch \ %D%/packages/patches/elm-compiler-disable-reactor.patch \ %D%/packages/patches/elm-compiler-fix-map-key.patch \ - %D%/packages/patches/emacs27-exec-path.patch \ %D%/packages/patches/emacs-exec-path.patch \ %D%/packages/patches/emacs-exwm-fix-fullscreen-states.patch \ %D%/packages/patches/emacs-fix-scheme-indent-function.patch \ diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index ad8d4b0606..a338abc774 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019 Ludovic Courtès ;;; Copyright © 2013 Andreas Enge ;;; Copyright © 2014 Taylan Ulrich Bayirli/Kammer -;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Mark H Weaver +;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver ;;; Copyright © 2014, 2015, 2016, 2017 Alex Kost ;;; Copyright © 2016, 2018 Arun Isaac ;;; Copyright © 2016 Federico Beffa @@ -61,6 +61,7 @@ #:use-module (gnu packages imagemagick) #:use-module (gnu packages linux) ; alsa-lib #:use-module (gnu packages mail) ; for mailutils + #:use-module (gnu packages multiprecision) #:use-module (gnu packages ncurses) #:use-module (gnu packages pkg-config) #:use-module (gnu packages texinfo) @@ -75,14 +76,14 @@ (define-public emacs (package (name "emacs") - (version "26.3") + (version "27.1") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/emacs/emacs-" version ".tar.xz")) (sha256 (base32 - "119ldpk7sgn9jlpyngv5y4z3i7bb8q3xp4p0qqi7i5nq39syd42d")) + "0h9f2wpmp6rb5rfwvqwv1ia1nw86h74p7hnz3vb3gjazj67i4k2a")) (patches (search-patches "emacs-exec-path.patch" "emacs-fix-scheme-indent-function.patch" "emacs-ignore-empty-xim-styles.patch" @@ -95,15 +96,7 @@ (for-each delete-file (append (find-files "." "\\.elc$") (find-files "." "loaddefs\\.el$") - ;; This is the only "autoloads" file that - ;; does not have "*loaddefs.el" name. - ;; TODO: Next time changing this package, - ;; replace the following with a call to - ;; `find-files', so that `delete-file' - ;; wouldn't error out when the file is - ;; missing, making the entire snippet field - ;; reusable as-is for `emacs-next' below. - '("eshell/esh-groups.el"))) + (find-files "eshell" "^esh-groups\\.el$"))) ;; Make sure Tramp looks for binaries in the right places on ;; remote Guix System machines, where 'getconf PATH' returns @@ -130,6 +123,7 @@ (arguments `(#:tests? #f ; no check target #:configure-flags (list "--with-modules" + "--with-cairo" "--disable-build-details") #:phases (modify-phases %standard-phases @@ -156,7 +150,7 @@ (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"))) + (emacs (string-append out "/bin/emacs"))) ;; This is duplicated from emacs-utils to prevent coupling. (define* (emacs-byte-compile-directory dir) @@ -180,7 +174,31 @@ ;; which leads to conflicts. (delete-file (string-append lisp-dir "/subdirs.el")) ;; Byte compile the site-start files. - (emacs-byte-compile-directory lisp-dir))))))) + (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 find-files should return one file + (pdmp (find-files libexec "^emacs\\.pdmp$")) + (pdmp-real (find-files libexec + "^\\.emacs\\.pdmp-real$"))) + (for-each (lambda (wrapper real) + (delete-file wrapper) + (rename-file real wrapper)) + pdmp pdmp-real)) + #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) @@ -192,12 +210,16 @@ ;; TODO: Add the optional dependencies. ("libx11" ,libx11) ("gtk+" ,gtk+) + ("cairo" ,cairo) + ("pango" ,pango) + ("harfbuzz" ,harfbuzz) ("libxft" ,libxft) ("libtiff" ,libtiff) ("giflib" ,giflib) ("libjpeg" ,libjpeg-turbo) - ("imagemagick" ,imagemagick) ("acl" ,acl) + ("jansson" ,jansson) + ("gmp" ,gmp) ;; When looking for libpng `configure' links with `-lpng -lz', so we ;; must also provide zlib as an input. @@ -243,119 +265,20 @@ large Lisp programs. It has full Unicode support for nearly all human languages.") (license license:gpl3+))) -(define-public emacs-next - (let ((commit "c36c5a3dedbb2e0349be1b6c3b7567ea7b594f1c") - (revision "0") - (emacs-version "27.0.91")) - (package - (inherit emacs) - (name "emacs-next") - (version (git-version emacs-version revision commit)) - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://git.savannah.gnu.org/git/emacs.git") - (commit commit))) - (sha256 - (base32 "0mlrg2npy1r79laahkgzhxd1qassfcdz8qk1cpw7mqgf6y5x505h")) - (file-name (git-file-name name version)) - (patches (search-patches "emacs27-exec-path.patch" - "emacs-fix-scheme-indent-function.patch" - "emacs-ignore-empty-xim-styles.patch" - "emacs-source-date-epoch.patch")) - (modules (origin-modules (package-source emacs))) - ;; TODO: once the snippet for `emacs' is changed to not fail when - ;; eshell/esh-groups.el does not exist, replace this snippet with - ;; (snippet (origin-snippet (package-source emacs))))). - (snippet - '(with-directory-excursion "lisp" - ;; Make sure Tramp looks for binaries in the right places on - ;; remote Guix System machines, where 'getconf PATH' returns - ;; something bogus. - (substitute* "net/tramp-sh.el" - ;; Patch the line after "(defcustom tramp-remote-path". - (("\\(tramp-default-remote-path") - (format #f "(tramp-default-remote-path ~s ~s ~s ~s " - "~/.guix-profile/bin" "~/.guix-profile/sbin" - "/run/current-system/profile/bin" - "/run/current-system/profile/sbin"))) - - ;; Make sure Man looks for C header files in the right - ;; places. - (substitute* "man.el" - (("\"/usr/local/include\"" line) - (string-join - (list line - "\"~/.guix-profile/include\"" - "\"/var/guix/profiles/system/profile/include\"") - " "))) - #t)))) - (arguments - (substitute-keyword-arguments (package-arguments emacs) - ((#:configure-flags flags) - `(cons* "--with-harfbuzz" ,flags)) - ((#:phases phases) - `(modify-phases ,phases - ;; The 'reset-gzip-timestamps phase will throw a - ;; permission error if gzip files aren't writable then - (add-before - 'reset-gzip-timestamps - 'make-compressed-files-writable - (lambda _ - (for-each make-file-writable - (find-files %output ".*\\.t?gz$")) - #t)) - ;; restore the dump file that Emacs installs somewhere in - ;; libexec/ to its original state - (add-after 'glib-or-gtk-wrap 'restore-emacs-pdmp - (lambda* (#:key outputs target #:allow-other-keys) - (let* ((libexec (string-append (assoc-ref outputs "out") - "/libexec")) - ;; each of these find-files should return one file - (pdmp (find-files libexec "^emacs\\.pdmp$")) - (pdmp-real (find-files libexec - "^\\.emacs\\.pdmp-real$"))) - (for-each (lambda (wrapper real) - (delete-file wrapper) - (rename-file real wrapper)) - pdmp pdmp-real) - #t))))))) - (inputs - `(("jansson" ,jansson) - ("harfbuzz" ,harfbuzz) - ;; Emacs no longer uses ImageMagick by default - ;; https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-27.0.91&id=c36c5a3dedbb2e0349be1b6c3b7567ea7b594f1c#n102 - ,@(alist-delete "imagemagick" (package-inputs emacs)))) - (native-inputs - `(("autoconf" ,autoconf) ; needed when building from trunk - ,@(package-native-inputs emacs))) - - ;; TODO: consider changing `emacs' to use a more robust way of - ;; specifying version for "EMACSLOADPATH", so as to avoid having to - ;; duplicate native-search-paths here. - (native-search-paths - (list (search-path-specification - (variable "EMACSLOADPATH") - ;; The versioned entry is for the Emacs' builtin libraries. - (files - (list "share/emacs/site-lisp" - (string-append "share/emacs/" emacs-version "/lisp")))) - (search-path-specification - (variable "INFOPATH") - (files '("share/info")))))))) - (define-public emacs-minimal ;; This is the version that you should use as an input to packages that just ;; need to byte-compile .el files. - (package (inherit emacs) + (package/inherit emacs (name "emacs-minimal") (synopsis "The extensible text editor (used only for byte-compilation)") (build-system gnu-build-system) (arguments (substitute-keyword-arguments (package-arguments emacs) ((#:configure-flags flags ''()) - `(list "--with-gnutls=no" "--disable-build-details")))) + `(list "--with-gnutls=no" "--disable-build-details")) + ((#:phases phases) + `(modify-phases ,phases + (delete 'restore-emacs-pdmp))))) (inputs `(("guix-emacs.el" ,(search-auxiliary-file "emacs/guix-emacs.el")) ("ncurses" ,ncurses))) @@ -363,8 +286,7 @@ languages.") `(("pkg-config" ,pkg-config))))) (define-public emacs-xwidgets - (package - (inherit emacs) + (package/inherit emacs (name "emacs-xwidgets") (synopsis "The extensible, customizable, self-documenting text editor (with xwidgets support)") @@ -372,14 +294,17 @@ editor (with xwidgets support)") (arguments (substitute-keyword-arguments (package-arguments emacs) ((#:configure-flags flags ''()) - `(cons "--with-xwidgets" ,flags)))) + `(cons "--with-xwidgets" ,flags)) + ((#:phases phases) + `(modify-phases ,phases + (delete 'restore-emacs-pdmp))))) (inputs `(("webkitgtk" ,webkitgtk) ("libxcomposite" ,libxcomposite) ,@(package-inputs emacs))))) (define-public emacs-no-x - (package (inherit emacs) + (package/inherit emacs (name "emacs-no-x") (synopsis "The extensible, customizable, self-documenting text editor (console only)") @@ -388,13 +313,20 @@ editor (console only)") (package-inputs emacs) '("libx11" "gtk+" "libxft" "libtiff" "giflib" "libjpeg" "imagemagick" "libpng" "librsvg" "libxpm" "libice" - "libsm" + "libsm" "cairo" "pango" "harfbuzz" ;; These depend on libx11, so remove them as well. - "libotf" "m17n-lib" "dbus"))))) + "libotf" "m17n-lib" "dbus"))) + (arguments + (substitute-keyword-arguments (package-arguments emacs) + ((#:configure-flags flags ''()) + `(delete "--with-cairo" ,flags)) + ((#:phases phases) + `(modify-phases ,phases + (delete 'restore-emacs-pdmp))))))) (define-public emacs-no-x-toolkit - (package (inherit emacs) + (package/inherit emacs (name "emacs-no-x-toolkit") (synopsis "The extensible, customizable, self-documenting text editor (without an X toolkit)" ) @@ -402,13 +334,15 @@ editor (without an X toolkit)" ) (inputs (append `(("inotify-tools" ,inotify-tools)) (alist-delete "gtk+" (package-inputs emacs)))) (arguments - `(,@(substitute-keyword-arguments (package-arguments emacs) - ((#:configure-flags cf) - `(cons "--with-x-toolkit=no" ,cf))))))) + (substitute-keyword-arguments (package-arguments emacs) + ((#:configure-flags flags ''()) + `(cons "--with-x-toolkit=no" ,flags)) + ((#:phases phases) + `(modify-phases ,phases + (delete 'restore-emacs-pdmp))))))) (define-public emacs-wide-int - (package - (inherit emacs) + (package/inherit emacs (name "emacs-wide-int") (synopsis "The extensible, customizable, self-documenting text editor (with wide ints)" ) @@ -420,7 +354,7 @@ editor (with wide ints)" ) (define-public guile-emacs (let ((commit "41120e0f595b16387eebfbf731fff70481de1b4b") (revision "0")) - (package (inherit emacs) + (package/inherit emacs (name "guile-emacs") (version (git-version "0.0.0" revision commit)) (source (origin @@ -444,6 +378,8 @@ editor (with wide ints)" ) ;; Tests aren't passing for now. #:tests? #f ,@(package-arguments emacs)) + ((#:configure-flags flags ''()) + `(delete "--with-cairo" ,flags)) ((#:phases phases) `(modify-phases ,phases (add-after 'unpack 'autogen @@ -452,7 +388,8 @@ editor (with wide ints)" ) ;; Build sometimes fails: deps/dispnew.d: No such file or directory (add-before 'build 'make-deps-dir (lambda _ - (invoke "mkdir" "-p" "src/deps")))))))))) + (invoke "mkdir" "-p" "src/deps"))) + (delete 'restore-emacs-pdmp)))))))) (define-public m17n-db (package diff --git a/gnu/packages/patches/emacs-exec-path.patch b/gnu/packages/patches/emacs-exec-path.patch index 884fa94a64..7303599df1 100644 --- a/gnu/packages/patches/emacs-exec-path.patch +++ b/gnu/packages/patches/emacs-exec-path.patch @@ -4,15 +4,13 @@ with things like GCC being referenced. --- a/lisp/loadup.el +++ b/lisp/loadup.el -@@ -64,6 +64,11 @@ - (expand-file-name "textmodes" dir) - (expand-file-name "vc" dir))))) - -+;; Reset 'exec-path' so we don't capture the build-time $PATH in the -+;; 'emacs' executable. -+(setq-default exec-path nil) -+(setq exec-path nil) -+ - (if (eq t purify-flag) - ;; Hash consing saved around 11% of pure space in my tests. - (setq purify-flag (make-hash-table :test 'equal :size 70000))) +@@ -481,7 +481,8 @@ lost after dumping"))) + ((equal dump-mode "dump") "emacs") + ((equal dump-mode "bootstrap") "emacs") + ((equal dump-mode "pbootstrap") "bootstrap-emacs.pdmp") +- (t (error "unrecognized dump mode %s" dump-mode))))) ++ (t (error "unrecognized dump mode %s" dump-mode)))) ++ (exec-path nil)) + (message "Dumping under the name %s" output) + (condition-case () + (delete-file output) diff --git a/gnu/packages/patches/emacs-ignore-empty-xim-styles.patch b/gnu/packages/patches/emacs-ignore-empty-xim-styles.patch index 606d3ece6f..398e65bdc8 100644 --- a/gnu/packages/patches/emacs-ignore-empty-xim-styles.patch +++ b/gnu/packages/patches/emacs-ignore-empty-xim-styles.patch @@ -5,7 +5,7 @@ Index: emacs-26.3/src/xfns.c =================================================================== --- emacs-26.3.orig/src/xfns.c +++ emacs-26.3/src/xfns.c -@@ -2533,6 +2533,8 @@ xic_free_xfontset (struct frame *f) +@@ -2628,6 +2628,8 @@ xic_free_xfontset (struct frame *f) static XIMStyle best_xim_style (XIMStyles *xim) { @@ -14,7 +14,7 @@ Index: emacs-26.3/src/xfns.c int i, j; int nr_supported = ARRAYELTS (supported_xim_styles); -@@ -2541,6 +2543,7 @@ best_xim_style (XIMStyles *xim) +@@ -2636,6 +2638,7 @@ best_xim_style (XIMStyles *xim) if (supported_xim_styles[i] == xim->supported_styles[j]) return supported_xim_styles[i]; diff --git a/gnu/packages/patches/emacs-source-date-epoch.patch b/gnu/packages/patches/emacs-source-date-epoch.patch index 41c03ef514..77ea7ac15c 100644 --- a/gnu/packages/patches/emacs-source-date-epoch.patch +++ b/gnu/packages/patches/emacs-source-date-epoch.patch @@ -3,9 +3,9 @@ Honor SOURCE_DATE_EPOCH variable to avoid non-determinism in generated --- a/lisp/emacs-lisp/autoload.el +++ b/lisp/emacs-lisp/autoload.el -@@ -378,8 +378,12 @@ - "Insert the section-header line, - which lists the file name and which functions are in it, etc." +@@ -419,8 +419,12 @@ + ;; nil t)) + ;; (match-end 2)))) (insert generate-autoload-section-header) - (prin1 `(autoloads ,autoloads ,load-name ,file ,time) - outbuf) diff --git a/gnu/packages/patches/emacs27-exec-path.patch b/gnu/packages/patches/emacs27-exec-path.patch deleted file mode 100644 index 418aa633a1..0000000000 --- a/gnu/packages/patches/emacs27-exec-path.patch +++ /dev/null @@ -1,18 +0,0 @@ -Do not capture the build-time value of $PATH in the 'emacs' executable -since this can noticeably increase the size of the closure of Emacs -with things like GCC being referenced. - -(like emacs-exec-path.patch, but for Emacs 27) - ---- a/lisp/loadup.el -+++ b/lisp/loadup.el -@@ -479,7 +479,8 @@ lost after dumping"))) - ((equal dump-mode "dump") "emacs") - ((equal dump-mode "bootstrap") "emacs") - ((equal dump-mode "pbootstrap") "bootstrap-emacs.pdmp") -- (t (error "unrecognized dump mode %s" dump-mode))))) -+ (t (error "unrecognized dump mode %s" dump-mode)))) -+ (exec-path nil)) - (message "Dumping under the name %s" output) - (condition-case () - (delete-file output) -- cgit v1.2.3