Subject: Re: [bug#38662] [PATCH] gnu: Add emacs-next.

From: Brett Gilio <[email-masked]>
Date: Thu, 19 Dec 2019 02:28:08 +0000 (UTC)

Dec 18, 2019 2:06:12 PM Amin Bandali :

> Add `emacs-next' for building latest Emacs from git.
>
> * gnu/packages/emacs.scm (emacs-next): New variable.
> (emacs): make the autoload deletion snippet not fail when eshell/esh-groups.el
> does not exist. This enables reuse of the entire snippet field of `emacs' for
> `emacs-next'.
> ---
> gnu/packages/emacs.scm | 64 +++++++++++++++++++-
> gnu/packages/patches/emacs27-exec-path.patch | 12 ++++
> 2 files changed, 73 insertions(+), 3 deletions(-)
> create mode 100644 gnu/packages/patches/emacs27-exec-path.patch
>
> diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
> index eba7f88551..102754deed 100644
> --- a/gnu/packages/emacs.scm
> +++ b/gnu/packages/emacs.scm
> @@ -17,6 +17,9 @@
> ;;; Copyright © 2018 Mathieu Othacehe
> ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice
> ;;; Copyright © 2019 Jesse John Gildersleve
> +;;; Copyright © 2019 Valentin Ignatev
> +;;; Copyright © 2019 Leo Prikler
> +;;; Copyright © 2019 Amin Bandali
> ;;;
> ;;; This file is part of GNU Guix.
> ;;;
> @@ -61,6 +64,7 @@
> #: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)
> @@ -83,15 +87,15 @@
> "emacs-source-date-epoch.patch"))
> (modules '((guix build utils)))
> (snippet
> - ;; Delete the bundled byte-compiled elisp files and
> - ;; generated autoloads.
> '(with-directory-excursion "lisp"
> + ;; Delete the bundled byte-compiled elisp files and generated
> + ;; autoloads.
> (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.
> - '("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
> @@ -211,6 +215,60 @@ large Lisp programs. It has full Unicode support for nearly all human
> languages.")
> (license license:gpl3+)))
>
> +(define-public emacs-next
> + (let ((commit "6008b679f65f8377a1a1b4601024ac83df013caf")
> + (revision "0"))
> + (package
> + (inherit emacs)
> + (name "emacs-next")
> + (version (git-version "27" revision commit))
> + (source
> + (origin
> + (method git-fetch)
> + (uri (git-reference
> + (url "https://git.savannah.gnu.org/git/emacs.git")
> + (commit commit)))
> + (sha256 (base32 "0niamywp3cq05hqc7k693c3d12jbqbzbfgl4aza9dja0jidv4b80"))
> + (file-name (git-file-name name version))
> + (patches (search-patches "emacs27-exec-path.patch"
> + "emacs-fix-scheme-indent-function.patch"
> + "emacs-source-date-epoch.patch"))
> + (modules (origin-modules (package-source emacs)))
> + (snippet (origin-snippet (package-source emacs)))))
> + (arguments
> + (substitute-keyword-arguments (package-arguments emacs)
> + ((#: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)
> + ,@(package-inputs emacs)))
> + (native-inputs
> + `(("autoconf" ,autoconf) ; needed when building from trunk
> + ,@(package-native-inputs emacs))))))
> +
> (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.
> diff --git a/gnu/packages/patches/emacs27-exec-path.patch b/gnu/packages/patches/emacs27-exec-path.patch
> new file mode 100644
> index 0000000000..368fa6e33a
> --- /dev/null
> +++ b/gnu/packages/patches/emacs27-exec-path.patch
> @@ -0,0 +1,12 @@
> +--- 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)
> --
> 2.23.0
>

This looks good to me! Thank you for your hard work Amin, et al.

--
Brett M. Gilio
GNU Guix, Contributor | GNU Project, Webmaster
[DFC0 C7F7 9EE6 0CA7 AE55 5E19 6722 43C4 A03F 0EEE]
<[email-masked]> <[email-masked]>