GNU bug report logs - #38662
[PATCH] gnu: Add emacs-next.

Previous Next

Package: guix-patches;

Reported by: Amin Bandali <bandali <at> gnu.org>

Date: Wed, 18 Dec 2019 20:06:01 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 38662 in the body.
You can then email your comments to 38662 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#38662; Package guix-patches. (Wed, 18 Dec 2019 20:06:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Amin Bandali <bandali <at> gnu.org>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Wed, 18 Dec 2019 20:06:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Amin Bandali <bandali <at> gnu.org>
To: guix-patches <at> gnu.org
Cc: Amin Bandali <bandali <at> gnu.org>
Subject: [PATCH] gnu: Add emacs-next.
Date: Wed, 18 Dec 2019 15:04:19 -0500
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 <m.othacehe <at> gmail.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me <at> tobias.gr>
 ;;; Copyright © 2019 Jesse John Gildersleve <jessejohngildersleve <at> zohomail.eu>
+;;; Copyright © 2019 Valentin Ignatev <valentignatev <at> gmail.com>
+;;; Copyright © 2019 Leo Prikler <leo.prikler <at> student.tugraz.at>
+;;; Copyright © 2019 Amin Bandali <bandali <at> gnu.org>
 ;;;
 ;;; 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





Information forwarded to guix-patches <at> gnu.org:
bug#38662; Package guix-patches. (Wed, 18 Dec 2019 20:16:02 GMT) Full text and rfc822 format available.

Message #8 received at 38662 <at> debbugs.gnu.org (full text, mbox):

From: Amin Bandali <bandali <at> gnu.org>
To: 38662 <at> debbugs.gnu.org
Cc: Valentin Ignatev <valentignatev <at> gmail.com>,
 Leo Prikler <leo.prikler <at> student.tugraz.at>
Subject: Re: [bug#38662] [PATCH] gnu: Add emacs-next.
Date: Wed, 18 Dec 2019 15:15:10 -0500
Many thanks to Valentin and Leo both for their work and for helping me
put this together.




Information forwarded to guix-patches <at> gnu.org:
bug#38662; Package guix-patches. (Thu, 19 Dec 2019 02:29:01 GMT) Full text and rfc822 format available.

Message #11 received at 38662 <at> debbugs.gnu.org (full text, mbox):

From: Brett Gilio <brettg <at> posteo.net>
To: Amin Bandali <bandali <at> gnu.org>
Cc: Amin Bandali <bandali <at> gnu.org>, 38662 <at> debbugs.gnu.org
Subject: Re: [bug#38662] [PATCH] gnu: Add emacs-next.
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]
<brettg <at> gnu.org> <brettg <at> posteo.net>





Information forwarded to guix-patches <at> gnu.org:
bug#38662; Package guix-patches. (Thu, 19 Dec 2019 13:37:02 GMT) Full text and rfc822 format available.

Message #14 received at 38662 <at> debbugs.gnu.org (full text, mbox):

From: Valentin Ignatev <valentignatev <at> gmail.com>
To: 38662 <at> debbugs.gnu.org
Subject: Re: [bug#38662] [PATCH] gnu: Add emacs-next.
Date: Thu, 19 Dec 2019 16:38:58 +0300
[Message part 1 (text/plain, inline)]
Thanks a lot for submitting the patch, I'm eager to see emacs-next in
upstream!
However, there is a potential issue with it. Original emacs package that we
inherit here sets EMACSLOADPATH with two values, one of which is some
directory path combined with the version:
https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/emacs.scm?h=master#n196

Every Emacs version creates a dir along the lines of
.gix-profile/share/emacs/version/lisp. Current emacs from master hardcodes
this version to 27.0.50, so this path becomes
.gix-profile/share/emacs/27.0.50/lisp. But since we set version based on
commit in this submitted patch, EMACSLOADPATH becomes invalid and this
specific directory doesn't end up in the guix-profile/etc/profile script,
so when you run emacs, you get multiple errors because Emacs can't load
builtin packages. I think that hardcoding a version of emacs-next to
"27.0.50" should work well. I'm attaching a patch that can be applied to
Amin's emacs-next patch.

Regards,
Valentin
[Message part 2 (text/html, inline)]
[emacs-next-hardcode-version.patch (text/x-patch, attachment)]

Information forwarded to guix-patches <at> gnu.org:
bug#38662; Package guix-patches. (Thu, 19 Dec 2019 14:07:02 GMT) Full text and rfc822 format available.

Message #17 received at 38662 <at> debbugs.gnu.org (full text, mbox):

From: Valentin Ignatev <valentignatev <at> gmail.com>
To: 38662 <at> debbugs.gnu.org
Subject: Re: [bug#38662] [PATCH] gnu: Add emacs-next.
Date: Thu, 19 Dec 2019 17:08:19 +0300
[Message part 1 (text/plain, inline)]
As Leo pointed out on IRC, my patch would break guix package -u emacs-next
because of hardcoded version. So it's better to fix the search patch
instead of applying it.
[Message part 2 (text/html, inline)]

Information forwarded to guix-patches <at> gnu.org:
bug#38662; Package guix-patches. (Fri, 20 Dec 2019 22:01:02 GMT) Full text and rfc822 format available.

Message #20 received at 38662 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Amin Bandali <bandali <at> gnu.org>
Cc: 38662 <at> debbugs.gnu.org
Subject: Re: [bug#38662] [PATCH] gnu: Add emacs-next.
Date: Fri, 20 Dec 2019 22:59:56 +0100
Hi Amin,

Amin Bandali <bandali <at> gnu.org> skribis:

> 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'.

Nice!  Please also mention the new patch file and add it to
gnu/local.mk.

It LGTM, but…

>               (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$")))

This change causes a rebuild of ‘emacs’, ‘emacs-minimal’, and everything
that depends on them (1K+ packages.)  Can it be avoided somehow?

One solution would be to duplicate the snippet for now in ‘emacs-next’.

> --- /dev/null
> +++ b/gnu/packages/patches/emacs27-exec-path.patch

Please add a line or two at the top explaining what this patch does.

Could you send an updated patch?

Thanks!

Ludo’.




Information forwarded to guix-patches <at> gnu.org:
bug#38662; Package guix-patches. (Sun, 22 Dec 2019 06:16:02 GMT) Full text and rfc822 format available.

Message #23 received at 38662 <at> debbugs.gnu.org (full text, mbox):

From: Amin Bandali <bandali <at> gnu.org>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: 38662 <at> debbugs.gnu.org
Subject: Re: [bug#38662] [PATCH] gnu: Add emacs-next.
Date: Sun, 22 Dec 2019 01:15:02 -0500
[Message part 1 (text/plain, inline)]
Hi Ludo’, all,

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.

[0001-gnu-Add-emacs-next.patch (text/x-diff, inline)]
From 3a03851868440c6c0bda81b30693e3ead1196bd2 Mon Sep 17 00:00:00 2001
From: Amin Bandali <bandali <at> gnu.org>
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.
---
 gnu/local.mk                                 |   1 +
 gnu/packages/emacs.scm                       | 110 ++++++++++++++++++-
 gnu/packages/patches/emacs27-exec-path.patch |  18 +++
 3 files changed, 127 insertions(+), 2 deletions(-)
 create mode 100644 gnu/packages/patches/emacs27-exec-path.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index b9d97ace27..a48e71089d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -802,6 +802,7 @@ 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-dired-toggle-sudo-emacs-26.patch   \
   %D%/packages/patches/emacs-exec-path.patch			\
   %D%/packages/patches/emacs-fix-scheme-indent-function.patch	\
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index eba7f88551..ebe47d7186 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -17,6 +17,9 @@
 ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe <at> gmail.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me <at> tobias.gr>
 ;;; Copyright © 2019 Jesse John Gildersleve <jessejohngildersleve <at> zohomail.eu>
+;;; Copyright © 2019 Valentin Ignatev <valentignatev <at> gmail.com>
+;;; Copyright © 2019 Leo Prikler <leo.prikler <at> student.tugraz.at>
+;;; Copyright © 2019 Amin Bandali <bandali <at> gnu.org>
 ;;;
 ;;; 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,14 +87,20 @@
                                       "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.
+                                   ;; 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")))
 
                  ;; Make sure Tramp looks for binaries in the right places on
@@ -211,6 +221,102 @@ large Lisp programs.  It has full Unicode support for nearly all human
 languages.")
     (license license:gpl3+)))
 
+(define-public emacs-next
+  (let ((commit "36abf6864604b3061c2e070f8997491fa2bce44c")
+        (revision "0")
+        (emacs-version "27.0.50"))
+    (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 "1ckn607p0clz0dhhlizvv7l03p4nminy48h53xrpz55w4rcrcm2l"))
+         (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)))
+         ;; 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)
+         ((#: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)))
+
+      ;; 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.
diff --git a/gnu/packages/patches/emacs27-exec-path.patch b/gnu/packages/patches/emacs27-exec-path.patch
new file mode 100644
index 0000000000..418aa633a1
--- /dev/null
+++ b/gnu/packages/patches/emacs27-exec-path.patch
@@ -0,0 +1,18 @@
+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)
-- 
2.23.0


Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Mon, 23 Dec 2019 18:27:02 GMT) Full text and rfc822 format available.

Notification sent to Amin Bandali <bandali <at> gnu.org>:
bug acknowledged by developer. (Mon, 23 Dec 2019 18:27:02 GMT) Full text and rfc822 format available.

Message #28 received at 38662-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Amin Bandali <bandali <at> gnu.org>
Cc: 38662-done <at> debbugs.gnu.org
Subject: Re: [bug#38662] [PATCH] gnu: Add emacs-next.
Date: Mon, 23 Dec 2019 19:26:30 +0100
Hi Amin,

Amin Bandali <bandali <at> gnu.org> 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 <bandali <at> gnu.org>
> 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’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Tue, 21 Jan 2020 12:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 5 years and 234 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.