unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#38662] [PATCH] gnu: Add emacs-next.
@ 2019-12-18 20:04 Amin Bandali
  2019-12-18 20:15 ` Amin Bandali
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Amin Bandali @ 2019-12-18 20:04 UTC (permalink / raw)
  To: 38662; +Cc: 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 <m.othacehe@gmail.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Jesse John Gildersleve <jessejohngildersleve@zohomail.eu>
+;;; Copyright © 2019 Valentin Ignatev <valentignatev@gmail.com>
+;;; Copyright © 2019 Leo Prikler <leo.prikler@student.tugraz.at>
+;;; Copyright © 2019 Amin Bandali <bandali@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

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [bug#38662] [PATCH] gnu: Add emacs-next.
  2019-12-18 20:04 [bug#38662] [PATCH] gnu: Add emacs-next Amin Bandali
@ 2019-12-18 20:15 ` Amin Bandali
  2019-12-19 13:38   ` Valentin Ignatev
  2019-12-19  2:28 ` Brett Gilio
  2019-12-20 21:59 ` Ludovic Courtès
  2 siblings, 1 reply; 8+ messages in thread
From: Amin Bandali @ 2019-12-18 20:15 UTC (permalink / raw)
  To: 38662; +Cc: Valentin Ignatev, Leo Prikler

Many thanks to Valentin and Leo both for their work and for helping me
put this together.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#38662] [PATCH] gnu: Add emacs-next.
  2019-12-18 20:04 [bug#38662] [PATCH] gnu: Add emacs-next Amin Bandali
  2019-12-18 20:15 ` Amin Bandali
@ 2019-12-19  2:28 ` Brett Gilio
  2019-12-20 21:59 ` Ludovic Courtès
  2 siblings, 0 replies; 8+ messages in thread
From: Brett Gilio @ 2019-12-19  2:28 UTC (permalink / raw)
  To: Amin Bandali; +Cc: 38662

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=UTF-8, Size: 5351 bytes --]



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@gnu.org> <brettg@posteo.net>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#38662] [PATCH] gnu: Add emacs-next.
  2019-12-18 20:15 ` Amin Bandali
@ 2019-12-19 13:38   ` Valentin Ignatev
  2019-12-19 14:08     ` Valentin Ignatev
  0 siblings, 1 reply; 8+ messages in thread
From: Valentin Ignatev @ 2019-12-19 13:38 UTC (permalink / raw)
  To: 38662


[-- Attachment #1.1: Type: text/plain, Size: 1004 bytes --]

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

[-- Attachment #1.2: Type: text/html, Size: 1263 bytes --]

[-- Attachment #2: emacs-next-hardcode-version.patch --]
[-- Type: text/x-patch, Size: 1128 bytes --]

Hardcode version in `emacs-next', use commit in `file-name'

* gnu/packages/emacs.scm (emacs-next):
Hardcode version to be 27.0.50.
Change file-name to use commit instead of version to avoid checkout collisions.

diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 102754deed..86795ba046 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -221,7 +221,7 @@ languages.")
     (package
       (inherit emacs)
       (name "emacs-next")
-      (version (git-version "27" revision commit))
+      (version "27.0.50")
       (source
        (origin
          (method git-fetch)
@@ -229,7 +229,7 @@ languages.")
                (url "https://git.savannah.gnu.org/git/emacs.git")
                (commit commit)))
          (sha256 (base32 "0niamywp3cq05hqc7k693c3d12jbqbzbfgl4aza9dja0jidv4b80"))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name name commit))
          (patches (search-patches "emacs27-exec-path.patch"
                                   "emacs-fix-scheme-indent-function.patch"
                                   "emacs-source-date-epoch.patch"))

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [bug#38662] [PATCH] gnu: Add emacs-next.
  2019-12-19 13:38   ` Valentin Ignatev
@ 2019-12-19 14:08     ` Valentin Ignatev
  0 siblings, 0 replies; 8+ messages in thread
From: Valentin Ignatev @ 2019-12-19 14:08 UTC (permalink / raw)
  To: 38662

[-- Attachment #1: Type: text/plain, Size: 168 bytes --]

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.

[-- Attachment #2: Type: text/html, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#38662] [PATCH] gnu: Add emacs-next.
  2019-12-18 20:04 [bug#38662] [PATCH] gnu: Add emacs-next Amin Bandali
  2019-12-18 20:15 ` Amin Bandali
  2019-12-19  2:28 ` Brett Gilio
@ 2019-12-20 21:59 ` Ludovic Courtès
  2019-12-22  6:15   ` Amin Bandali
  2 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2019-12-20 21:59 UTC (permalink / raw)
  To: Amin Bandali; +Cc: 38662

Hi Amin,

Amin Bandali <bandali@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’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#38662] [PATCH] gnu: Add emacs-next.
  2019-12-20 21:59 ` Ludovic Courtès
@ 2019-12-22  6:15   ` Amin Bandali
  2019-12-23 18:26     ` bug#38662: " Ludovic Courtès
  0 siblings, 1 reply; 8+ messages in thread
From: Amin Bandali @ 2019-12-22  6:15 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 38662

[-- Attachment #1: Type: text/plain, Size: 269 bytes --]

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.


[-- Attachment #2: 0001-gnu-Add-emacs-next.patch --]
[-- Type: text/x-diff, Size: 9825 bytes --]

From 3a03851868440c6c0bda81b30693e3ead1196bd2 Mon Sep 17 00:00:00 2001
From: Amin Bandali <bandali@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@gmail.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Jesse John Gildersleve <jessejohngildersleve@zohomail.eu>
+;;; Copyright © 2019 Valentin Ignatev <valentignatev@gmail.com>
+;;; Copyright © 2019 Leo Prikler <leo.prikler@student.tugraz.at>
+;;; Copyright © 2019 Amin Bandali <bandali@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


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* bug#38662: [PATCH] gnu: Add emacs-next.
  2019-12-22  6:15   ` Amin Bandali
@ 2019-12-23 18:26     ` Ludovic Courtès
  0 siblings, 0 replies; 8+ messages in thread
From: Ludovic Courtès @ 2019-12-23 18:26 UTC (permalink / raw)
  To: Amin Bandali; +Cc: 38662-done

Hi Amin,

Amin Bandali <bandali@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@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’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2019-12-23 18:27 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-18 20:04 [bug#38662] [PATCH] gnu: Add emacs-next Amin Bandali
2019-12-18 20:15 ` Amin Bandali
2019-12-19 13:38   ` Valentin Ignatev
2019-12-19 14:08     ` Valentin Ignatev
2019-12-19  2:28 ` Brett Gilio
2019-12-20 21:59 ` Ludovic Courtès
2019-12-22  6:15   ` Amin Bandali
2019-12-23 18:26     ` bug#38662: " Ludovic Courtès

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).