* [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 external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.