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]