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

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 23 Dec 2019 18:27:02 +0000

Your bug report

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

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
38662: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=38662
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: [bug#38662] [PATCH] gnu: Add emacs-next.
From: Ludovic Courtès <[email-masked]>
To: Amin Bandali <[email-masked]>
Cc: [email-masked]
Date: Mon, 23 Dec 2019 19:26:30 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi Amin,

Amin Bandali <[email-masked]> skribis:

> Thanks for the all feedback.  Below you will find v2 with the requested
> changes, as well as a workaround for "EMACSLOADPATH" to use the correct
> version name, currently 27.0.50, for `emacs-next', which I forgot to
> include in my previous patch.
>
> From 3a03851868440c6c0bda81b30693e3ead1196bd2 Mon Sep 17 00:00:00 2001
> From: Amin Bandali <[email-masked]>
> Date: Tue, 17 Dec 2019 23:49:49 -0500
> Subject: [PATCH v2] gnu: Add emacs-next.
>
> 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/patches/emacs27-exec-path.patch: New file.
> * gnu/local.mk (dist_patch_DATA): Add the above patch file to it.

Applied, thanks!

Ludo’.

Subject: [PATCH] gnu: Add emacs-next.
From: Amin Bandali <[email-masked]>
To: [email-masked]
Cc: Amin Bandali <[email-masked]>
Date: Wed, 18 Dec 2019 15:04:19 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

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 <[email-masked]>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <[email-masked]>
 ;;; Copyright © 2019 Jesse John Gildersleve <[email-masked]>
+;;; Copyright © 2019 Valentin Ignatev <[email-masked]>
+;;; Copyright © 2019 Leo Prikler <[email-masked]>
+;;; Copyright © 2019 Amin Bandali <[email-masked]>
 ;;;
 ;;; 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