This patch set supersedes the wip-emacs branch. It can be deleted, once it's merged. Hi Guix, as you all recall, I recently put in some efforts into improving the Emacs user experience in Guix. There are three bugs addressed by this patch set: 1. Emacs libraries may inadvertently overwrite files in other libraries (solved by using ELPA-style subdirectories) 2. Emacs cannot find its own load-path after an update. (Solved with a wrapper). 3. Emacs can't find core programs, such as "ls" or "gzip". Below are some git statistics, have fun with them while I'm waiting for a bug number to send the patches :) Regards, Leo Leo Prikler (27): profiles: Add hook for Emacs subdirs. gnu: emacs: Wrap EMACSLOADPATH. gnu: emacs: Patch more program file names. build-system: emacs: Use subdirectories again. gnu: emacs-libgit: Adjust to changes in emacs-build-system. gnu: emacs-guix: Adjust to changes in emacs-build-system. gnu: emacs-telega: Adjust to changes in emacs-build-system. gnu: Add emacs-telega-contrib. gnu: emacs-emacsql: Adjust to changes in emacs-build-system. gnu: emacs-howm: Adjust to changes in emacs-build-system. gnu: emacs-ert-runner: Adjust to changes in emacs-build-system. gnu: emacs-shroud: Adjust to changes in emacs-build-system. gnu: emacs-sly-stepper: Adjust to changes in emacs-build-system. gnu: emacs-sly-stepper: Remove generated sources. gnu: emacs-org-contrib: Adjust to changes in emacs-build-system. gnu: emacs-edbi: Adjust to changes in emacs-build-system. gnu: emacs-scel: Adjust to changes in emacs-build-system. gnu: emacs-vterm: Adjust to changes in emacs-build-system. gnu: notmuch: Adjust to changes in emacs-build-system. gnu: emacs-pyim: Update to 3.6. gnu: emacs-realgud: Adjust to changes in emacs-build-system. gnu: geiser-gauche: Adjust to changes in emacs-build-system. gnu: emacs-dvc: Adjust to changes in emacs-build-system. gnu: emacs-w3m: Adjust to changes in emacs-build-system. gnu: emacs-wget: Port to emacs-build-system. gnu: emacs-haskell-mode: Adjust to changes in emacs-build-system. gnu: emacs-julia-snail: Adjust to changes in emacs-build-system. Morgan Smith (5): gnu: emacs-geiser: Update to 0.13. gnu: Add emacs-geiser-guile. gnu: emacs-guix: Update to 0.5.2-4.8ce6d21. gnu: emacs-flycheck-guile: Add missing input. gnu: guile-studio: Add missing input. Xinglu Chen (1): gnu: emacs-pdf-tools: Adjust to changes in emacs-build-system. gnu/local.mk | 2 + gnu/packages/emacs-xyz.scm | 369 ++++++++++-------- gnu/packages/emacs.scm | 52 ++- gnu/packages/guile-xyz.scm | 1 + gnu/packages/mail.scm | 3 +- ...ser-autoload-activate-implementation.patch | 26 ++ .../emacs-geiser-guile-auto-activate.patch | 34 ++ guix/build/emacs-build-system.scm | 70 ++-- guix/profiles.scm | 41 ++ guix/status.scm | 2 + 10 files changed, 391 insertions(+), 209 deletions(-) create mode 100644 gnu/packages/patches/emacs-geiser-autoload-activate-implementation.patch create mode 100644 gnu/packages/patches/emacs-geiser-guile-auto-activate.patch -- 2.31.1
* guix/profiles.scm (emacs-subdirs): New variable. (%default-profile-hooks): Add it here. * guix/status.scm (hook-message): Add a message for emacs-subdirs. --- guix/profiles.scm | 41 +++++++++++++++++++++++++++++++++++++++++ guix/status.scm | 2 ++ 2 files changed, 43 insertions(+) diff --git a/guix/profiles.scm b/guix/profiles.scm index 67d90532c1..26fe266a61 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -1115,6 +1115,46 @@ MANIFEST. Single-file bundles are required by programs such as Git and Lynx." `((type . profile-hook) (hook . ca-certificate-bundle)))) +(define (emacs-subdirs manifest) + (define build + (with-imported-modules (source-module-closure + '((guix build profiles) + (guix build utils))) + #~(begin + (use-modules (guix build utils) + (guix build profiles) + (ice-9 ftw) ; scandir + (srfi srfi-1) ; append-map + (srfi srfi-26)) + + (let ((destdir (string-append #$output "/share/emacs/site-lisp")) + (subdirs + (append-map + (lambda (dir) + (filter + file-is-directory? + (map (cute string-append dir "/" <>) + (scandir dir (negate (cute member <> '("." ".."))))))) + (filter file-exists? + (map (cute string-append <> "/share/emacs/site-lisp") + '#$(manifest-inputs manifest)))))) + (mkdir-p destdir) + (with-directory-excursion destdir + (call-with-output-file "subdirs.el" + (lambda (port) + (write + `(normal-top-level-add-to-load-path + (list ,@subdirs)) + port) + (newline port) + #t))))))) + (gexp->derivation "emacs-subdirs" build + #:local-build? #t + #:substitutable? #f + #:properties + `((type . profile-hook) + (hook . emacs-subdirs)))) + (define (glib-schemas manifest) "Return a derivation that unions all schemas from manifest entries and creates the Glib 'gschemas.compiled' file." @@ -1672,6 +1712,7 @@ MANIFEST." fonts-dir-file ghc-package-cache-file ca-certificate-bundle + emacs-subdirs glib-schemas gtk-icon-themes gtk-im-modules diff --git a/guix/status.scm b/guix/status.scm index 362ae2882c..2683678201 100644 --- a/guix/status.scm +++ b/guix/status.scm @@ -379,6 +379,8 @@ the current build phase." (G_ "building GHC package cache...")) ('ca-certificate-bundle (G_ "building CA certificate bundle...")) + ('emacs-subdirs + (G_ "listing Emacs subdirs...")) ('glib-schemas (G_ "generating GLib schema cache...")) ('gtk-icon-themes -- 2.31.1
With this, the search path specification of EMACSLOADPATH does no longer depend on the version of Emacs, which should make upgrading major versions less painful. See also: - <https://bugs.gnu.org/43627> - <https://bugs.gnu.org/47458> * gnu/packages/emacs.scm (emacs)[#:phases]: Add ‘wrap-load-path’. [native-search-path]<EMACSLOADPATH>: Do not search for builtin libraries. (emacs-next)[native-search-path]: Inherit from emacs. --- gnu/packages/emacs.scm | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 7447cfe33a..e1b01ac22b 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -201,6 +201,24 @@ (car (find-files "bin" "^emacs-([0-9]+\\.)+[0-9]+$")) "bin/emacs") #t))) + (add-after 'strip-double-wrap 'wrap-load-path + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (lisp-dirs (find-files (string-append out "/share/emacs") + "^lisp$" + #:directories? #t))) + (for-each + (lambda (prog) + (wrap-program prog + `("EMACSLOADPATH" suffix ,lisp-dirs))) + (find-files (string-append out "/bin") + ;; Matches versioned and unversioned emacs binaries. + ;; We don't patch emacsclient, because it takes its + ;; environment variables from emacs. + ;; Likewise, we don't need to patch helper binaries + ;; like etags, ctags or ebrowse. + "^emacs(-[0-9]+(\\.[0-9]+)*)?$")) + #t))) (add-before 'reset-gzip-timestamps 'make-compressed-files-writable ;; The 'reset-gzip-timestamps phase will throw a permission error ;; if gzip files aren't writable then. This phase is needed when @@ -255,9 +273,7 @@ (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/" version "/lisp")))) + (files '("share/emacs/site-lisp"))) (search-path-specification (variable "INFOPATH") (files '("share/info"))))) @@ -294,18 +310,7 @@ languages.") "0igjm9kwiswn2dpiy2k9xikbdfc7njs07ry48fqz70anljj8y7y3")))) (native-inputs `(("autoconf" ,autoconf) - ,@(package-native-inputs emacs))) - (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/" - (version-major+minor+point version) - "/lisp")))) - (search-path-specification - (variable "INFOPATH") - (files '("share/info")))))))) + ,@(package-native-inputs emacs)))))) (define-public emacs-next-pgtk (let ((commit "ae18c8ec4f0ef37c8c9cda473770ff47e41291e2") -- 2.31.1
* gnu/packages/emacs.scm (patch-program-file-names): Patch "ls", "sh" and "gzip". --- gnu/packages/emacs.scm | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index e1b01ac22b..93db9fa242 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -136,6 +136,15 @@ "lisp/progmodes/sh-script.el") (("\"/bin/sh\"") (format #f "~s" (which "sh")))) + (substitute* "lisp/files.el" + (("\\(purecopy \"ls\"\\)") + (format #f "(purecopy ~s)" (which "ls")))) + (substitute* '("src/filelock.c" + "lisp/dired-aux.el" + "lisp/jka-compr.el" + "lisp/jka-cmpr-hook.el") + (("\"(sh\|gzip)\"" all cmd) + (format #f "~s" (which cmd)))) #t)) (add-before 'configure 'fix-/bin/pwd (lambda _ @@ -231,6 +240,10 @@ `(("gnutls" ,gnutls) ("ncurses" ,ncurses) + ;; Required for "core" functionality, such as dired and compression. + ("coreutils" ,coreutils) + ("gzip" ,gzip) + ;; Avoid Emacs's limited movemail substitute that retrieves POP3 email ;; only via insecure channels. This is not needed for (modern) IMAP. ("mailutils" ,mailutils) @@ -361,7 +374,9 @@ also enabled and works without glitches even on X server.")))) (delete 'strip-double-wrap))))) (inputs `(("guix-emacs.el" ,(search-auxiliary-file "emacs/guix-emacs.el")) - ("ncurses" ,ncurses))) + ("ncurses" ,ncurses) + ("coreutils" ,coreutils) + ("gzip" ,gzip))) (native-inputs `(("pkg-config" ,pkg-config))))) -- 2.31.1
With this, Emacs libraries are installed in the ELPA_NAME-VERSION subdirectory of site-lisp and potential subdirectories should no longer collide. * guix/build/emacs-build-system.scm (add-source-to-load-path): Rename to... (expand-load-path): ... this. Also expand lone subdirectories of site-lisp. (%standard-phases): Adjust accordingly. (elpa-directory): New variable. Export it publicly for use in other build systems. (build, patch-el-files, make-autoloads): Use ELPA name and version to construct subdirectories of %install-dir. (install): Install in subdirectory. --- guix/build/emacs-build-system.scm | 70 ++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 25 deletions(-) diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm index 26ea59bc25..ae0f2e569e 100644 --- a/guix/build/emacs-build-system.scm +++ b/guix/build/emacs-build-system.scm @@ -26,13 +26,16 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) + #:use-module (ice-9 format) + #:use-module (ice-9 ftw) #:use-module (ice-9 rdelim) #:use-module (ice-9 regex) #:use-module (ice-9 match) #:export (%standard-phases %default-include %default-exclude - emacs-build)) + emacs-build + elpa-directory)) ;; Commentary: ;; @@ -73,33 +76,43 @@ archive, a directory, or an Emacs Lisp file." #t) (gnu:unpack #:source source))) -(define* (add-source-to-load-path #:key dummy #:allow-other-keys) - "Augment the EMACSLOADPATH environment variable with the source directory." +(define* (expand-load-path #:key (prepend-source? #t) #:allow-other-keys) + "Expand EMACSLOADPATH, so that inputs, whose code resides in subdirectories, +are properly found. +If @var{prepend-source?} is @code{#t} (the default), also add the current +directory to EMACSLOADPATH in front of any other directories." (let* ((source-directory (getcwd)) (emacs-load-path (string-split (getenv "EMACSLOADPATH") #\:)) - ;; XXX: Make sure the Emacs core libraries appear at the end of - ;; EMACSLOADPATH, to avoid shadowing any other libraries depended - ;; upon. - (emacs-load-path-non-core (filter (cut string-contains <> - "/share/emacs/site-lisp") - emacs-load-path)) + (emacs-load-path* + (map + (lambda (dir) + (match (scandir dir (negate (cute member <> '("." "..")))) + ((sub) (string-append dir "/" sub)) + (_ dir))) + emacs-load-path)) (emacs-load-path-value (string-append - (string-join (cons source-directory - emacs-load-path-non-core) - ":") + (string-join + (if prepend-source? + (cons source-directory emacs-load-path*) + emacs-load-path*) + ":") ":"))) (setenv "EMACSLOADPATH" emacs-load-path-value) - (format #t "source directory ~s prepended to the `EMACSLOADPATH' \ -environment variable\n" source-directory))) + (when prepend-source? + (format #t "source directory ~s prepended to the `EMACSLOADPATH' \ +environment variable\n" source-directory)) + (let ((diff (lset-difference string=? emacs-load-path* emacs-load-path))) + (unless (null? diff) + (format #t "expanded load paths for ~{~a~^, ~}\n" + (map basename diff)))))) (define* (build #:key outputs inputs #:allow-other-keys) "Compile .el files." (let* ((emacs (string-append (assoc-ref inputs "emacs") "/bin/emacs")) - (out (assoc-ref outputs "out")) - (site-lisp (string-append out %install-dir))) + (out (assoc-ref outputs "out"))) (setenv "SHELL" "sh") (parameterize ((%emacs emacs)) - (emacs-byte-compile-directory site-lisp)))) + (emacs-byte-compile-directory (elpa-directory out))))) (define* (patch-el-files #:key outputs #:allow-other-keys) "Substitute the absolute \"/bin/\" directory with the right location in the @@ -116,7 +129,8 @@ store in '.el' files." #:binary #t)) (let* ((out (assoc-ref outputs "out")) - (site-lisp (string-append out %install-dir)) + (elpa-name-ver (store-directory->elpa-name-version out)) + (el-dir (string-append out %install-dir "/" elpa-name-ver)) ;; (ice-9 regex) uses libc's regexp routines, which cannot deal with ;; strings containing NULs. Filter out such files. TODO: Remove ;; this workaround when <https://bugs.gnu.org/30116> is fixed. @@ -130,7 +144,7 @@ store in '.el' files." (error "patch-el-files: unable to locate " cmd-name)) (string-append "\"" cmd "\""))))) - (with-directory-excursion site-lisp + (with-directory-excursion el-dir ;; Some old '.el' files (e.g., tex-buf.el in AUCTeX) are still ;; ISO-8859-1-encoded. (unless (false-if-exception (substitute-program-names)) @@ -181,14 +195,14 @@ parallel. PARALLEL-TESTS? is ignored when using a non-make TEST-COMMAND." (not (any (cut match-stripped-file "excluded" <>) exclude))))) (let* ((out (assoc-ref outputs "out")) - (site-lisp (string-append out %install-dir)) + (el-dir (elpa-directory out)) (files-to-install (find-files source install-file?))) (cond ((not (null? files-to-install)) (for-each (lambda (file) (let* ((stripped-file (string-drop file (string-length source))) - (target-file (string-append site-lisp stripped-file))) + (target-file (string-append el-dir stripped-file))) (format #t "`~a' -> `~a'~%" file target-file) (install-file file (dirname target-file)))) files-to-install) @@ -219,11 +233,11 @@ parallel. PARALLEL-TESTS? is ignored when using a non-make TEST-COMMAND." "Generate the autoloads file." (let* ((emacs (string-append (assoc-ref inputs "emacs") "/bin/emacs")) (out (assoc-ref outputs "out")) - (site-lisp (string-append out %install-dir)) (elpa-name-ver (store-directory->elpa-name-version out)) - (elpa-name (package-name->name+version elpa-name-ver))) + (elpa-name (package-name->name+version elpa-name-ver)) + (el-dir (elpa-directory out))) (parameterize ((%emacs emacs)) - (emacs-generate-autoloads elpa-name site-lisp)))) + (emacs-generate-autoloads elpa-name el-dir)))) (define* (enable-autoloads-compilation #:key outputs #:allow-other-keys) "Remove the NO-BYTE-COMPILATION local variable embedded in the generated @@ -258,10 +272,16 @@ second hyphen. This corresponds to 'name-version' as used in ELPA packages." strip-store-file-name) store-dir)) +(define (elpa-directory store-dir) + "Given the store directory STORE-DIR return the absolute install directory +for libraries following the ELPA convention." + (string-append store-dir %install-dir "/" + (store-directory->elpa-name-version store-dir))) + (define %standard-phases (modify-phases gnu:%standard-phases (replace 'unpack unpack) - (add-after 'unpack 'add-source-to-load-path add-source-to-load-path) + (add-after 'unpack 'expand-load-path expand-load-path) (delete 'bootstrap) (delete 'configure) (delete 'build) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-libgit)[set-libgit--module-file]: Use elpa-directory for libgit--module-file path. --- gnu/packages/emacs-xyz.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 8e80ccbb56..b0d5e0189c 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -501,7 +501,7 @@ on stdout instead of using a socket as the Emacsclient does.") (make-file-writable "libgit.el") (emacs-substitute-variables "libgit.el" ("libgit--module-file" - (string-append out "/share/emacs/site-lisp/libegit2.so"))) + (string-append (emacs:elpa-directory out) "/libegit2.so"))) #t))) (add-before 'install 'prepare-for-install (lambda _ -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-guix)[#:phases]: Add expand-load-path. [#:configure-flags]: Install to elpa-directory. --- gnu/packages/emacs-xyz.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index b0d5e0189c..f918ade782 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -3009,6 +3009,23 @@ type, for example: packages, buffers, files, etc.") (base32 "1pqw7zbgxzwpig4xr0izc3z8h80c72i6bl5yi12br0d7aq6dbkvj")))) (build-system gnu-build-system) + (arguments + `(#:modules ((guix build gnu-build-system) + ((guix build emacs-build-system) #:prefix emacs:) + (guix build utils)) + #:imported-modules (,@%gnu-build-system-modules + (guix build emacs-build-system) + (guix build emacs-utils)) + #:configure-flags + (list (string-append "--with-lispdir=" + (emacs:elpa-directory (assoc-ref %outputs "out")))) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'expand-load-path + (lambda _ + ((assoc-ref emacs:%standard-phases 'expand-load-path) + #:prepend-source? #f) + #t))))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) -- 2.31.1
* gnu/packages/emacs-telega.scm (emacs-telega)[#:phases]: Reorder. <telega-paths-patch>: Rename to... <patch-sources>: ... this. Also don't patch paths to subdirs. Remove the snippet, that would push contrib to the load path. <server-suite-patch>: Rename to... <patch-test-suite>: ... this. <emacs-install>: Also install etc. <emacs-bytecomp-contrib, telega-install-contrib, telega-install-data>: Removed phases. --- gnu/packages/emacs-xyz.scm | 62 +++++++++----------------------------- 1 file changed, 15 insertions(+), 47 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index f918ade782..fd38f023d3 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -25131,7 +25131,9 @@ other @code{helm-type-file} sources such as @code{helm-locate}.") (("python3 run_tests.py") "")) #t)) - (add-after 'check 'telega-paths-patch + (add-after 'unpack 'expand-load-path + (assoc-ref emacs:%standard-phases 'expand-load-path)) + (add-after 'unpack 'patch-sources (lambda* (#:key inputs #:allow-other-keys) ;; Hard-code paths to `ffplay` and `ffmpeg`. (let ((ffplay-bin (string-append (assoc-ref inputs "ffmpeg") @@ -25147,24 +25149,15 @@ other @code{helm-type-file} sources such as @code{helm-locate}.") (string-append "(and (file-executable-p \"" ffmpeg-bin "\")" "\"" ffmpeg-bin "\")")))) - ;; Modify telega-util to reflect unique dir name in - ;; `telega-install-data' phase. - (substitute* "telega-util.el" - (("\\(concat \"etc/\" filename\\) telega--lib-directory") - "(concat \"telega-data/\" filename) - (locate-dominating-file telega--lib-directory - \"telega-data\")")) - ;; Modify telega.el to reflect unique dir name in - ;; `telega-install-contrib' phase. + ;; This would push the "contrib" sources to the load path, + ;; but as contrib is not installed alongside telega, it does + ;; nothing. (substitute* "telega.el" - (("\\(push \\(expand-file-name \"contrib\" telega--lib-directory\\) load-path\\)") - "(push (expand-file-name \"telega-contrib\" - (locate-dominating-file telega--lib-directory - \"telega-contrib\")) load-path)")) + (("\\(push .* load-path\\)") "")) #t)) ;; The server test suite has a hardcoded path. ;; Reset this behavior to use the proper path. - (add-after 'unpack 'server-suite-patch + (add-after 'unpack 'patch-test-suite (lambda _ (substitute* "server/run_tests.py" (("~/.telega/telega-server") @@ -25176,39 +25169,14 @@ other @code{helm-type-file} sources such as @code{helm-locate}.") (invoke "python3" "server/run_tests.py") #t)) (delete 'configure) - ;; Build emacs-side using `emacs-build-system' - (add-after 'compress-documentation 'emacs-add-source-to-load-path - (assoc-ref emacs:%standard-phases 'add-source-to-load-path)) - ;; Manually invoke bytecompilation for the contrib - ;; subdirectory. - (add-after 'emacs-add-source-to-load-path 'emacs-bytecomp-contrib - (lambda _ - (substitute* "Makefile" - (("byte-recompile-directory \".\"") - "byte-recompile-directory \"contrib\"")) - (invoke "make" "compile") - #t)) - (add-after 'emacs-bytecomp-contrib 'emacs-install - (assoc-ref emacs:%standard-phases 'install)) - ;; This step installs subdir /etc, which contains images, sounds and - ;; various other data, next to the site-lisp dir. - (add-after 'emacs-install 'telega-install-data - (lambda* (#:key outputs #:allow-other-keys) - (copy-recursively - "etc" - (string-append (assoc-ref outputs "out") - "/share/emacs/telega-data/")) - #t)) - (add-after 'emacs-install 'telega-install-contrib - (lambda* (#:key outputs #:allow-other-keys) - (copy-recursively - "contrib" - (string-append (assoc-ref outputs "out") - "/share/emacs/telega-contrib")) - #t)) - (add-after 'telega-install-contrib 'emacs-build + (add-after 'expand-load-path 'emacs-install + (lambda args + (apply (assoc-ref emacs:%standard-phases 'install) + #:include `("etc" ,@emacs:%default-include) + args))) + (add-after 'emacs-install 'emacs-build (assoc-ref emacs:%standard-phases 'build)) - (add-after 'telega-install-contrib 'emacs-make-autoloads + (add-after 'emacs-install 'emacs-make-autoloads (assoc-ref emacs:%standard-phases 'make-autoloads))))) (inputs `(("ffmpeg" ,ffmpeg))) ; mp4/gif support. -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-telega-contrib): New variable. --- gnu/packages/emacs-xyz.scm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index fd38f023d3..8861909bf1 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -25202,6 +25202,21 @@ Telegram messaging platform.") (home-page "https://zevlg.github.io/telega.el/") (license license:gpl3+)))) +(define-public emacs-telega-contrib + (package/inherit emacs-telega + (name "emacs-telega-contrib") + (build-system emacs-build-system) + (arguments + `(#:exclude '("telega-live-location.el") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ (chdir "contrib") #t))))) + (propagated-inputs + `(("emacs-telega" ,emacs-telega) + ("emacs-alert" ,emacs-alert) + ("emacs-all-the-icons" ,emacs-all-the-icons))))) + (define-public emacs-doom-modeline (package (name "emacs-doom-modeline") -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-emacsql)[#:phases]: Use standard build and install phases. [build-emacsql-sqlite]: Use cc-for-target. --- gnu/packages/emacs-xyz.scm | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 8861909bf1..79c3c42613 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -15490,7 +15490,6 @@ object has been freed.") (srfi srfi-26)) #:phases (modify-phases %standard-phases - (delete 'build) ;‘build-emacsql-sqlite’ compiles ‘*.el’ files. (add-before 'install 'patch-elisp-shell-shebangs (lambda _ (substitute* (find-files "." "\\.el") @@ -15501,7 +15500,7 @@ object has been freed.") (setenv "SHELL" "sh"))) (add-after 'setenv-shell 'build-emacsql-sqlite (lambda _ - (invoke "make" "binary" "CC=gcc"))) + (invoke "make" "binary" (string-append "CC=" ,(cc-for-target))))) (add-after 'build-emacsql-sqlite 'install-emacsql-sqlite ;; This build phase installs emacs-emacsql binary. (lambda* (#:key outputs #:allow-other-keys) @@ -15522,16 +15521,7 @@ object has been freed.") ;; in the right place. ("(defvar emacsql-sqlite-executable" (string-append (assoc-ref outputs "out") - "/bin/emacsql-sqlite")))))) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out"))) - (install-file "sqlite/emacsql-sqlite" - (string-append out "/bin")) - (for-each (cut install-file <> - (string-append out "/share/emacs/site-lisp")) - (find-files "." "\\.elc*$"))) - #t))))) + "/bin/emacsql-sqlite"))))))))) (inputs `(("emacs-minimal" ,emacs-minimal) ("mariadb" ,mariadb "lib") -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-howm)[#:configure-flags]: Install to elpa-directory. --- gnu/packages/emacs-xyz.scm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 79c3c42613..ecf0e7ace6 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -2348,8 +2348,7 @@ a set of simplified face specifications and a user-supplied color palette") `(("emacs" ,emacs-minimal))) (arguments `(#:configure-flags - (list (string-append "--with-howmdir=" %output - "/share/emacs/site-lisp/")) + (list (string-append "--with-howmdir=" (emacs:elpa-directory %output))) #:modules ((guix build gnu-build-system) ((guix build emacs-build-system) #:prefix emacs:) (guix build utils)) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-ert-runner)[install-executable]: Use elpa-directory for the value of ERT_RUNNER. --- gnu/packages/emacs-xyz.scm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index ecf0e7ace6..7c26e872fe 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -13181,8 +13181,7 @@ variable instead, to remind you of that variable's meaning.") (getenv "TMPDIR") "/source"))) (substitute* "bin/ert-runner" (("ERT_RUNNER=\"\\$\\(dirname \\$\\(dirname \\$0\\)\\)") - (string-append "ERT_RUNNER=\"" out - "/share/emacs/site-lisp"))) + (string-append "ERT_RUNNER=\"" (elpa-directory out)))) (install-file "bin/ert-runner" (string-append out "/bin")) (wrap-program (string-append out "/bin/ert-runner") (list "EMACSLOADPATH" ":" 'prefix -- 2.31.1
From: Xinglu Chen <public@yoctocell.xyz> * gnu/packages/emacs-xyz.scm (emacs-pdf-tools)[#:phases]: Rename 'emacs-add-source-to-load-path' to 'emacs-expand-load-path'. Use expand-load-path, which replaces add-source-to-load-path. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/packages/emacs-xyz.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 7c26e872fe..1902327265 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -2917,8 +2917,8 @@ during idle time, while Emacs is doing nothing else.") ;; upgrading" that pdf-tools tries to perform. (emacs-substitute-variables "pdf-tools.el" ("pdf-tools-handle-upgrades" '())))) - (add-after 'emacs-patch-variables 'emacs-add-source-to-load-path - (assoc-ref emacs:%standard-phases 'add-source-to-load-path)) + (add-after 'emacs-patch-variables 'emacs-expand-load-path + (assoc-ref emacs:%standard-phases 'expand-load-path)) (add-after 'emacs-add-source-to-load-path 'emacs-install (assoc-ref emacs:%standard-phases 'install)) (add-after 'emacs-install 'emacs-build -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-shroud)[#:phases]: Add ‘expand-load-path’. [#:configure-flags]: Use elpa-directory for lispdir. --- gnu/packages/emacs-xyz.scm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 1902327265..96df1ecadd 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -1049,6 +1049,19 @@ for editing Racket's Scribble documentation syntax in Emacs.") (sha256 (base32 "0q2pb3w8s833fjhkzicciw2php4lsnismad1dnwgp2lcway757ra")))) (build-system gnu-build-system) + (arguments + `(#:modules ((guix build gnu-build-system) + ((guix build emacs-build-system) #:prefix emacs:) + (guix build utils)) + #:imported-modules (,@%gnu-build-system-modules + (guix build emacs-build-system) + (guix build emacs-utils)) + #:configure-flags (list (string-append "--with-lispdir=" + (emacs:elpa-directory %output))) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'expand-load-path + (assoc-ref emacs:%standard-phases 'expand-load-path))))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-sly-stepper)[#:phases]: <add-contrib-to-emacs-load-path>: Rename to... <expand-sly-contrib>: ... this. Use find-files to find contrib directory. <install>: Find slynk-stepper.lisp in elpa-directory. --- gnu/packages/emacs-xyz.scm | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 96df1ecadd..8615269546 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -10333,24 +10333,26 @@ inside the source file.") (propagated-inputs `(("emacs-sly" ,emacs-sly))) (arguments - '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include) + `(#:include (cons* "\\.lisp$" "\\.asd$" %default-include) #:phases (modify-phases %standard-phases ;; The package provides autoloads. (delete 'make-autoloads) (delete 'enable-autoloads-compilation) - (add-after 'add-source-to-load-path 'add-contrib-to-emacs-load-path + (add-after 'expand-load-path 'expand-sly-contrib (lambda* (#:key inputs #:allow-other-keys) - (let ((sly (assoc-ref inputs "emacs-sly"))) + (let* ((sly (assoc-ref inputs "emacs-sly")) + (contrib (find-files sly "^contrib$" #:directories? #t))) (setenv "EMACSLOADPATH" - (string-append sly "/share/emacs/site-lisp/contrib:" - (getenv "EMACSLOADPATH")))) - #t)) + (string-append (string-join contrib ":") + ":" + (getenv "EMACSLOADPATH"))) + #t))) (add-after 'install 'find-agnostic-lizard (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) - (file (string-append out "/share/emacs/site-lisp/" - "slynk-stepper.lisp")) + (file (string-append (elpa-directory out) + "/slynk-stepper.lisp")) (asd (string-append (assoc-ref inputs "cl-agnostic-lizard") "/share/common-lisp/systems/agnostic-lizard.asd"))) -- 2.31.1
* gnu/packages/emacs-xyz.scm (sly-stepper)[source]: Add snippet to remove autoloads. [#:phases]: Do not delete ‘make-autoloads’ or ‘enable-autoloads-compilation’. --- gnu/packages/emacs-xyz.scm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 8615269546..53dd61e924 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -10326,7 +10326,12 @@ inside the source file.") (file-name (git-file-name name version)) (sha256 (base32 - "1hxniaxifdw3m4y4yssgy22xcmmf558wx7rpz66wy5hwybjslf7b")))) + "1hxniaxifdw3m4y4yssgy22xcmmf558wx7rpz66wy5hwybjslf7b")) + (modules '((guix build utils))) + (snippet + '(begin + (map delete-file (find-files "." ".*-autoloads\\.elc?$")) + #t)))) (build-system emacs-build-system) (inputs `(("cl-agnostic-lizard" ,cl-agnostic-lizard))) @@ -10336,9 +10341,6 @@ inside the source file.") `(#:include (cons* "\\.lisp$" "\\.asd$" %default-include) #:phases (modify-phases %standard-phases - ;; The package provides autoloads. - (delete 'make-autoloads) - (delete 'enable-autoloads-compilation) (add-after 'expand-load-path 'expand-sly-contrib (lambda* (#:key inputs #:allow-other-keys) (let* ((sly (assoc-ref inputs "emacs-sly")) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-org-contrib)[delete-org-files]: Excurse into elpa-directory. --- gnu/packages/emacs-xyz.scm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 53dd61e924..be000dede3 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -11116,8 +11116,7 @@ programming and reproducible research.") (duplicates (lset-intersection string=? contrib-files org+contrib-files))) - (with-directory-excursion - (string-append out "/share/emacs/site-lisp") + (with-directory-excursion (elpa-directory out) (for-each delete-file duplicates)) #t)))))) (propagated-inputs -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-edbi)[patch-path]: Execute after unpack. [wrap-edbi-bridge]: New phase (after wrap). Find edbi-bridge in elpa-directory. --- gnu/packages/emacs-xyz.scm | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index be000dede3..f3d9f98189 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -21419,17 +21419,21 @@ asynchronous communications, the RPC response is fairly good.") `(#:include '("\\.el$" "\\.pl$") #:phases (modify-phases %standard-phases - (add-after 'install 'patch-path - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((perl (assoc-ref inputs "perl")) - (dir (string-append (assoc-ref outputs "out") - "/share/emacs/site-lisp"))) - (substitute* (string-append dir "/edbi.el") + (add-after 'unpack 'patch-path + (lambda* (#:key inputs #:allow-other-keys) + (let ((perl (assoc-ref inputs "perl"))) + (substitute* "edbi.el" (("\"perl\"") (string-append "\"" perl "/bin/perl\""))) - (chmod (string-append dir "/edbi-bridge.pl") #o555) - (wrap-program (string-append dir "/edbi-bridge.pl") - `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")))) - #t)))))) + #t))) + (add-after 'wrap 'wrap-edbi-bridge + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bridge (string-append (elpa-directory out) + "/edbi-bridge.pl"))) + (chmod bridge #o555) + (wrap-program bridge + `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB"))))) + #t))))) (synopsis "Database Interface for Emacs Lisp") (description "This program connects the database server through Perl's DBI, and provides DB-accessing API and the simple management UI.") -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-scel)[#:phases]<configure>: Use elpa-directory. <add-el-dir-to-emacs-load-path>: Adjust location. --- gnu/packages/emacs-xyz.scm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index f3d9f98189..3e0650e87e 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -6087,12 +6087,11 @@ to a key in your preferred mode.") (lambda* (#:key outputs #:allow-other-keys) (substitute* "el/CMakeLists.txt" (("share/emacs/site-lisp/SuperCollider") - (string-append - "share/emacs/site-lisp"))) + (elpa-directory (assoc-ref outputs "out")))) ((assoc-ref cmake:%standard-phases 'configure) #:outputs outputs #:configure-flags '("-DSC_EL_BYTECOMPILE=OFF")))) - (add-after 'add-source-to-load-path 'add-el-dir-to-emacs-load-path + (add-after 'expand-load-path 'add-el-dir-to-emacs-load-path (lambda _ (setenv "EMACSLOADPATH" (string-append (getcwd) "/el:" (getenv "EMACSLOADPATH"))) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-vterm)[substitute-vterm-module-path]: Move after ‘unpack’. --- gnu/packages/emacs-xyz.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 3e0650e87e..16e17bac0c 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -21585,7 +21585,7 @@ stored playlists.") (guix build cmake-build-system)) #:phases (modify-phases %standard-phases - (add-before 'add-source-to-load-path 'substitute-vterm-module-path + (add-after 'unpack 'substitute-vterm-module-path (lambda* (#:key outputs #:allow-other-keys) (chmod "vterm.el" #o644) (emacs-substitute-sexps "vterm.el" -- 2.31.1
* gnu/packages/mail.scm (notmuch)[configure]: Use elpa-directory. --- gnu/packages/mail.scm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 56fae3fcba..abef94baf8 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1317,8 +1317,7 @@ invoking @command{notifymuch} from the post-new hook.") (setenv "CONFIG_SHELL" (which "sh")) (let* ((out (assoc-ref outputs "out")) - (elisp - (string-append out "/share/emacs/site-lisp/"))) + (elisp (emacs:elpa-directory out))) (invoke "./configure" (string-append "--prefix=" out) (string-append "--emacslispdir=" elisp) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-pyim): Update to 3.6. --- gnu/packages/emacs-xyz.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 16e17bac0c..c92277854d 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -12582,13 +12582,13 @@ containing words from the Rime project.") (define-public emacs-pyim (package (name "emacs-pyim") - (version "3.2") + (version "3.6") (source (origin (method url-fetch) (uri (string-append "https://elpa.gnu.org/packages/pyim-" version ".tar")) (sha256 - (base32 "1rr9mq334dqf7mx1ii7910zkigw7chl63iws4sw0qsn014kjlb0a")))) + (base32 "1fmbzh33s9xdvrfjhkqr9ydcqbiv8lr04k5idvbpc9vwjjjan5y0")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-async" ,emacs-async) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-realgud)[fix-autogen-script]: Move after ‘expand-load-path’. --- gnu/packages/emacs-xyz.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index c92277854d..ed731267dc 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -7708,7 +7708,7 @@ after buffer changes.") "(require-relative-list \ '(\"../../common/run\") \"realgud:\")\n"))) #t)) - (add-after 'unpack 'fix-autogen-script + (add-after 'expand-load-path 'fix-autogen-script (lambda _ (substitute* "autogen.sh" (("./configure") "sh configure")) -- 2.31.1
From: Morgan Smith <Morgan.J.Smith@outlook.com> * gnu/packages/patches/emacs-geiser-autoload-activate-implementation.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it here. * gnu/packages/emacs-xyz.scm (emacs-geiser): Update to 0.13. [source]: Change upstream URL. [build-system]: Change to emacs-build-system. [arguments]: Adjust accordingly. [native-inputs]: Remove emacs, autoconf, and automake. [description]: State that other packages are needed for geiser to be useful. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/local.mk | 1 + gnu/packages/emacs-xyz.scm | 46 +++++++++++-------- ...ser-autoload-activate-implementation.patch | 26 +++++++++++ 3 files changed, 54 insertions(+), 19 deletions(-) create mode 100644 gnu/packages/patches/emacs-geiser-autoload-activate-implementation.patch diff --git a/gnu/local.mk b/gnu/local.mk index 075504e302..c4eb1ab1f5 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -967,6 +967,7 @@ dist_patch_DATA = \ %D%/packages/patches/emacs-exec-path.patch \ %D%/packages/patches/emacs-exwm-fix-fullscreen-states.patch \ %D%/packages/patches/emacs-fix-scheme-indent-function.patch \ + %D%/packages/patches/emacs-geiser-autoload-activate-implementation.patch \ %D%/packages/patches/emacs-ignore-empty-xim-styles.patch \ %D%/packages/patches/emacs-json-reformat-fix-tests.patch \ %D%/packages/patches/emacs-highlight-stages-add-gexp.patch \ diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index ed731267dc..74f82293fc 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -217,43 +217,51 @@ (define-public emacs-geiser (package (name "emacs-geiser") - (version "0.12") + (version "0.13") (source (origin (method git-fetch) (uri (git-reference - (url "https://gitlab.com/jaor/geiser/") + (url "https://gitlab.com/emacs-geiser/geiser.git") (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "0n718xpys7v94zaf9lpmsx97qgn6qxif1acr718wyvpmfr4hiv08")))) - (build-system gnu-build-system) + (base32 "0bwjcfmcyv6z0i5ivqirgcibxdkrlf5vyxcbj7k8dk7flwg1fpd9")) + (patches + (search-patches "emacs-geiser-autoload-activate-implementation.patch")))) + (build-system emacs-build-system) (arguments '(#:phases (modify-phases %standard-phases - (add-after 'install 'post-install - (lambda* (#:key outputs #:allow-other-keys) - (symlink "geiser-install.el" - (string-append (assoc-ref outputs "out") - "/share/emacs/site-lisp/" - "geiser-autoloads.el")) - #t))))) - (inputs - `(("guile" ,guile-2.2))) + ;; Move the source files to the top level, which is included in + ;; the EMACSLOADPATH. + (add-after 'unpack 'move-source-files + (lambda _ + (let ((el-files (find-files "./elisp" ".*\\.el$"))) + (for-each (lambda (f) + (rename-file f (basename f))) + el-files)) + #t)) + (add-before 'install 'make-info + (lambda _ + (with-directory-excursion "doc" + (invoke "makeinfo" "--no-split" + "-o" "geiser.info" "geiser.texi"))))))) (native-inputs - `(("emacs" ,emacs-minimal) - ("autoconf" ,autoconf) - ("automake" ,automake) - ("texinfo" ,texinfo))) + `(("texinfo" ,texinfo))) (home-page "https://nongnu.org/geiser/") - (synopsis "Collection of Emacs modes for Guile and Racket hacking") + (synopsis "Collection of Emacs modes for Scheme hacking") (description "Geiser is a collection of Emacs major and minor modes that conspire with one or more Scheme implementations to keep the Lisp Machine Spirit alive. The continuously running Scheme interpreter takes the center of the stage in Geiser. A bundle of Elisp shims orchestrates the dialog between the Scheme implementation, Emacs and, ultimately, the schemer, giving them access to live -metadata.") +metadata. + +This package provides just the core of Geiser. To effectively use it with your +favourite Scheme implementation, you also need the corresponding geiser package, +e.g. emacs-geiser-guile for Guile.") (license license:bsd-3))) (define-public emacs-ac-geiser diff --git a/gnu/packages/patches/emacs-geiser-autoload-activate-implementation.patch b/gnu/packages/patches/emacs-geiser-autoload-activate-implementation.patch new file mode 100644 index 0000000000..47d513b3a3 --- /dev/null +++ b/gnu/packages/patches/emacs-geiser-autoload-activate-implementation.patch @@ -0,0 +1,26 @@ +From 9fd3174cead8bfa17a8413bffa38362853d71a02 Mon Sep 17 00:00:00 2001 +From: jao <jao@gnu.org> +Date: Mon, 5 Apr 2021 23:06:56 +0100 +Subject: [PATCH] autoload geiser activate implementation + +--- + elisp/geiser.el | 3 +++ + readme.org | 4 ++-- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/elisp/geiser.el b/elisp/geiser.el +index 887b8da..96c1dd6 100644 +--- a/elisp/geiser.el ++++ b/elisp/geiser.el +@@ -104,6 +104,9 @@ + ;;;###autoload + (autoload 'geiser-mode--maybe-activate "geiser-mode") + ++;;;###autoload ++(autoload 'geiser-activate-implementation "geiser-impl") ++ + ;;;###autoload + (mapc (lambda (group) + (custom-add-load group (symbol-name group)) +-- +GitLab -- 2.31.1
From: Morgan Smith <Morgan.J.Smith@outlook.com> * gnu/packages/patches/emacs-geiser-guile-auto-activate.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it here. * gnu/packages/emacs-xyz.scm (emacs-geiser-guile): New variable. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/local.mk | 1 + gnu/packages/emacs-xyz.scm | 42 +++++++++++++++++++ .../emacs-geiser-guile-auto-activate.patch | 34 +++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 gnu/packages/patches/emacs-geiser-guile-auto-activate.patch diff --git a/gnu/local.mk b/gnu/local.mk index c4eb1ab1f5..2175e542d9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -967,6 +967,7 @@ dist_patch_DATA = \ %D%/packages/patches/emacs-exec-path.patch \ %D%/packages/patches/emacs-exwm-fix-fullscreen-states.patch \ %D%/packages/patches/emacs-fix-scheme-indent-function.patch \ + %D%/packages/patches/emacs-geiser-guile-auto-activate.patch \ %D%/packages/patches/emacs-geiser-autoload-activate-implementation.patch \ %D%/packages/patches/emacs-ignore-empty-xim-styles.patch \ %D%/packages/patches/emacs-json-reformat-fix-tests.patch \ diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 74f82293fc..dc1b1e0c7e 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -264,6 +264,48 @@ favourite Scheme implementation, you also need the corresponding geiser package, e.g. emacs-geiser-guile for Guile.") (license license:bsd-3))) +(define-public emacs-geiser-guile + (package + (name "emacs-geiser-guile") + (version "0.13") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/emacs-geiser/guile.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0w264pjwlxna31260ll6gd0n77jlynhzf3h2dws5wr7jflns5mbc")) + (patches (search-patches + "emacs-geiser-guile-auto-activate.patch")))) + (build-system emacs-build-system) + (arguments + '(#:include (cons "^src/" %default-include) + #:phases + (modify-phases %standard-phases + (add-after 'make-autoloads 'patch-autoloads + (lambda* (#:key outputs #:allow-other-keys) + (substitute* (string-append + (elpa-directory (assoc-ref outputs "out")) + "/geiser-guile-autoloads.el") + ;; Activating implementations fails when Geiser is not yet + ;; loaded, so let's defer that until it is. + (("\\(geiser-activate-implementation .*\\)" all) + (string-append + "(eval-after-load 'geiser-impl '" all ")"))) + #t))))) + (inputs + `(("guile" ,guile-2.2))) + (propagated-inputs + `(("geiser" ,emacs-geiser))) + (home-page "https://nongnu.org/geiser/") + (synopsis "Guile Scheme support for Geiser") + (description + "This package adds support for the Guile Scheme implementation to Geiser, +a generic Scheme interaction mode for the GNU Emacs editor.") + (license license:bsd-3))) + (define-public emacs-ac-geiser (let ((commit "93818c936ee7e2f1ba1b315578bde363a7d43d05") (revision "0")) diff --git a/gnu/packages/patches/emacs-geiser-guile-auto-activate.patch b/gnu/packages/patches/emacs-geiser-guile-auto-activate.patch new file mode 100644 index 0000000000..44837f90df --- /dev/null +++ b/gnu/packages/patches/emacs-geiser-guile-auto-activate.patch @@ -0,0 +1,34 @@ +From 93ef7101fdfcc7eac6f465b4b9788c384a323c14 Mon Sep 17 00:00:00 2001 +From: jao <jao@gnu.org> +Date: Mon, 5 Apr 2021 20:17:50 +0100 +Subject: [PATCH] fix: auto-activate guile implementation + +--- + geiser-guile.el | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/geiser-guile.el b/geiser-guile.el +index 340442b..deeb76f 100644 +--- a/geiser-guile.el ++++ b/geiser-guile.el +@@ -25,6 +25,7 @@ + (require 'geiser-syntax) + (require 'geiser-custom) + (require 'geiser-repl) ++(require 'geiser-impl) + (require 'geiser-base) + (require 'geiser-eval) + (require 'geiser-edit) +@@ -474,6 +475,9 @@ it spawn a server thread." + + (geiser-impl--add-to-alist 'regexp "\\.scm$" 'guile t) + ++;;;###autoload ++(geiser-activate-implementation 'guile) ++ + ;;;###autoload + (autoload 'run-guile "geiser-guile" "Start a Geiser Guile REPL." t) + +-- +GitLab + -- 2.31.1
From: Morgan Smith <Morgan.J.Smith@outlook.com> * gnu/packages/emacs-xyz.scm (emacs-guix): Update to 0.5.2-4.8ce6d21. [source]: Update upstream URL. [propagated-inputs]: Add emacs-geiser-guile. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/packages/emacs-xyz.scm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index dc1b1e0c7e..95699088f1 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -3055,8 +3055,8 @@ type, for example: packages, buffers, files, etc.") (license license:gpl3+))) (define-public emacs-guix - (let* ((commit "a694fdbcedb6edd2239a31d326e475c763ee32f8") - (revision "3")) + (let ((commit "8ce6d219e87c5097abff9ce6f1f5a4293cdfcb31") + (revision "4")) (package (name "emacs-guix") (version (git-version "0.5.2" revision commit)) @@ -3064,12 +3064,12 @@ type, for example: packages, buffers, files, etc.") (method git-fetch) (uri (git-reference ;; TODO: Use the official version when it has a new home - (url "https://github.com/jsoo1/guix.el") + (url "https://github.com/alezost/guix.el") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 - "1pqw7zbgxzwpig4xr0izc3z8h80c72i6bl5yi12br0d7aq6dbkvj")))) + "0awbd8x154c4dk4av7inpgd63n07xzng84vvc8qckmgljknc0j7k")))) (build-system gnu-build-system) (arguments `(#:modules ((guix build gnu-build-system) @@ -3100,6 +3100,7 @@ type, for example: packages, buffers, files, etc.") ("guix" ,guix))) (propagated-inputs `(("geiser" ,emacs-geiser) + ("geiser-guile" ,emacs-geiser-guile) ("guile-gcrypt" ,guile-gcrypt) ("dash" ,emacs-dash) ("bui" ,emacs-bui) -- 2.31.1
From: Morgan Smith <Morgan.J.Smith@outlook.com> * gnu/packages/emacs-xyz.scm (emacs-flycheck-guile)[propagated-inputs]: Add emacs-geiser-guile. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/packages/emacs-xyz.scm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 95699088f1..29238e1b16 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -5060,7 +5060,8 @@ repetitions for example).") (base32 "0cs5r0ik6a3bl1k3imjl0r8y1i69kx9x9m9cgxj470qk34brwyj5")))) (propagated-inputs `(("emacs-flycheck" ,emacs-flycheck) - ("emacs-geiser" ,emacs-geiser))) + ("emacs-geiser" ,emacs-geiser) + ("emacs-geiser-guile" ,emacs-geiser-guile))) (build-system emacs-build-system) (home-page "https://github.com/flatwhatson/flycheck-guile") (synopsis "GNU Guile support for Flycheck") -- 2.31.1
From: Morgan Smith <Morgan.J.Smith@outlook.com> * gnu/packages/guile-xyz.scm (guile-studio)[inputs]: Add emacs-geiser-guile. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/packages/guile-xyz.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm index e2ee5454a0..9bfb19c333 100644 --- a/gnu/packages/guile-xyz.scm +++ b/gnu/packages/guile-xyz.scm @@ -2750,6 +2750,7 @@ The picture values can directly be displayed in Geiser.") ("emacs-doom-modeline" ,emacs-doom-modeline) ("emacs-modus-themes" ,emacs-modus-themes) ("emacs-geiser" ,emacs-geiser) + ("emacs-geiser-guile" ,emacs-geiser-guile) ("emacs-company" ,emacs-company) ("emacs-ivy" ,emacs-ivy) ("emacs-flycheck" ,emacs-flycheck) -- 2.31.1
* gnu/packages/emacs-xyz.scm (geiser-gauche)[arguments]: Use #:include rather than #:phases to add geiser-gauche.scm. --- gnu/packages/emacs-xyz.scm | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 29238e1b16..074fb9ba89 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -347,16 +347,7 @@ using geiser.") (base32 "0rxncnzx7qgcpvc8nz0sd8r0hwrplazzraahdwhbpq0q6z8ywqgg")))) (build-system emacs-build-system) (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'install 'install-scheme - (lambda* (#:key outputs #:allow-other-keys) - (install-file - "geiser-gauche.scm" - (string-append - (assoc-ref outputs "out") - "/share/emacs/site-lisp")) - #t))))) + `(#:include (cons "^geiser-gauche\\.scm$" %default-include))) (native-inputs `(("geiser" ,emacs-geiser))) (home-page "https://gitlab.com/emacs-geiser/gauche") -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-dvc)[#:configure-flags]: Use elpa-directory for lispdir. --- gnu/packages/emacs-xyz.scm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 074fb9ba89..31312e9001 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -5192,9 +5192,15 @@ completion of relevant keywords.") (file-name (string-append name "-" version "-checkout")))) (build-system gnu-build-system) (arguments - `(#:configure-flags - (list (string-append "--with-lispdir=" (assoc-ref %outputs "out") - "/share/emacs/site-lisp/")) + `(#:modules ((guix build gnu-build-system) + ((guix build emacs-build-system) #:prefix emacs:) + (guix build utils)) + #:imported-modules (,@%gnu-build-system-modules + (guix build emacs-build-system) + (guix build emacs-utils)) + #:configure-flags + (list (string-append "--with-lispdir=" + (emacs:elpa-directory (assoc-ref %outputs "out")))) #:tests? #f ;no test suite #:phases (modify-phases %standard-phases -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-w3m)[#:configure-flags]: Use elpa-directory to determine lispdir. [#:phases]<install>: Likewise. --- gnu/packages/emacs-xyz.scm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 31312e9001..a7a1925c8e 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -1696,14 +1696,16 @@ or unexpected behavior inside an elisp configuration file (typically ("imagemagick" ,imagemagick))) (arguments `(#:modules ((guix build gnu-build-system) + ((guix build emacs-build-system) #:prefix emacs:) (guix build utils) (guix build emacs-utils)) #:imported-modules (,@%gnu-build-system-modules + (guix build emacs-build-system) (guix build emacs-utils)) #:configure-flags (let ((out (assoc-ref %outputs "out"))) (list (string-append "--with-lispdir=" - out "/share/emacs/site-lisp") + (emacs:elpa-directory out)) (string-append "--with-icondir=" out "/share/images/emacs-w3m") ;; Leave .el files uncompressed, otherwise GC can't @@ -1748,8 +1750,7 @@ or unexpected behavior inside an elisp configuration file (typically (lambda* (#:key outputs #:allow-other-keys) (invoke "make" "install" "install-icons") (with-directory-excursion - (string-append (assoc-ref outputs "out") - "/share/emacs/site-lisp") + (emacs:elpa-directory (assoc-ref outputs "out")) (for-each delete-file '("ChangeLog" "ChangeLog.1")) (symlink "w3m-load.el" "w3m-autoloads.el") #t)))))) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-wget)[build-system]: Use emacs-build-system. [arguments]: Drop #:modules and #:imported-modules. Adjust #:phases accordingly. --- gnu/packages/emacs-xyz.scm | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index a7a1925c8e..e940c75303 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -1770,35 +1770,18 @@ or unexpected behavior inside an elisp configuration file (typically version ".orig.tar.gz")) (sha256 (base32 "10byvyv9dk0ib55gfqm7bcpxmx2qbih1jd03gmihrppr2mn52nff")))) - (build-system gnu-build-system) + (build-system emacs-build-system) (inputs `(("wget" ,wget))) (native-inputs `(("emacs" ,emacs-minimal))) (arguments - `(#:modules ((guix build gnu-build-system) - (guix build utils) - (guix build emacs-utils)) - #:imported-modules (,@%gnu-build-system-modules - (guix build emacs-utils)) - #:tests? #f ; no check target + `(#:tests? #f ; no check target #:phases (modify-phases %standard-phases - (replace 'configure - (lambda* (#:key outputs #:allow-other-keys) - (substitute* "Makefile" - (("/usr/local") (assoc-ref outputs "out")) - (("/site-lisp/emacs-wget") "/site-lisp")) - #t)) - (add-before 'build 'patch-exec-paths + (add-after 'unpack 'patch-exec-paths (lambda* (#:key inputs outputs #:allow-other-keys) (let ((wget (assoc-ref inputs "wget"))) (emacs-substitute-variables "wget.el" ("wget-command" (string-append wget "/bin/wget")))) - #t)) - (add-after 'install 'post-install - (lambda* (#:key outputs #:allow-other-keys) - (emacs-generate-autoloads - "wget" (string-append (assoc-ref outputs "out") - "/share/emacs/site-lisp/")) #t))))) (home-page "https://www.emacswiki.org/emacs/EmacsWget") (synopsis "Simple file downloader for Emacs based on wget") -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-haskell-mode)[#:phases]<install>: Install to elpa-directory. --- gnu/packages/emacs-xyz.scm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index e940c75303..86b18401ed 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -1216,7 +1216,11 @@ replacement.") "/bin/emacs")) #:modules ((ice-9 match) (srfi srfi-26) + ((guix build emacs-build-system) #:prefix emacs:) ,@%gnu-build-system-modules) + #:imported-modules (,@%gnu-build-system-modules + (guix build emacs-build-system) + (guix build emacs-utils)) #:phases (modify-phases %standard-phases (delete 'configure) @@ -1257,7 +1261,7 @@ replacement.") (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) - (el-dir (string-append out "/share/emacs/site-lisp")) + (el-dir (emacs:elpa-directory out)) (doc (string-append out "/share/doc/haskell-mode-" ,version)) (info (string-append out "/share/info"))) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-julia-snail)[arguments]: Drop #:phases. Use #:include to add julia sources. --- gnu/packages/emacs-xyz.scm | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 86b18401ed..31e0a407e5 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -8840,14 +8840,7 @@ mode with the package emacs-julia-mode.") "065ix3jycsx3wvkq7a6060i93caxisdvgxgqb1l6rq15n4qln78y")))) (build-system emacs-build-system) (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'install 'JuliaSnail-jl - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (install-file "JuliaSnail.jl" - (string-append out "/share/emacs/site-lisp/"))) - #t))))) + `(#:include (cons "^JuliaSnail\\.jl" %default-include))) (inputs `(("emacs-dash" ,emacs-dash) ("emacs-s" ,emacs-s) -- 2.31.1
* guix/profiles.scm (emacs-subdirs): New variable. (%default-profile-hooks): Add it here. * guix/status.scm (hook-message): Add a message for emacs-subdirs. --- guix/profiles.scm | 41 +++++++++++++++++++++++++++++++++++++++++ guix/status.scm | 2 ++ 2 files changed, 43 insertions(+) diff --git a/guix/profiles.scm b/guix/profiles.scm index 67d90532c1..26fe266a61 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -1115,6 +1115,46 @@ MANIFEST. Single-file bundles are required by programs such as Git and Lynx." `((type . profile-hook) (hook . ca-certificate-bundle)))) +(define (emacs-subdirs manifest) + (define build + (with-imported-modules (source-module-closure + '((guix build profiles) + (guix build utils))) + #~(begin + (use-modules (guix build utils) + (guix build profiles) + (ice-9 ftw) ; scandir + (srfi srfi-1) ; append-map + (srfi srfi-26)) + + (let ((destdir (string-append #$output "/share/emacs/site-lisp")) + (subdirs + (append-map + (lambda (dir) + (filter + file-is-directory? + (map (cute string-append dir "/" <>) + (scandir dir (negate (cute member <> '("." ".."))))))) + (filter file-exists? + (map (cute string-append <> "/share/emacs/site-lisp") + '#$(manifest-inputs manifest)))))) + (mkdir-p destdir) + (with-directory-excursion destdir + (call-with-output-file "subdirs.el" + (lambda (port) + (write + `(normal-top-level-add-to-load-path + (list ,@subdirs)) + port) + (newline port) + #t))))))) + (gexp->derivation "emacs-subdirs" build + #:local-build? #t + #:substitutable? #f + #:properties + `((type . profile-hook) + (hook . emacs-subdirs)))) + (define (glib-schemas manifest) "Return a derivation that unions all schemas from manifest entries and creates the Glib 'gschemas.compiled' file." @@ -1672,6 +1712,7 @@ MANIFEST." fonts-dir-file ghc-package-cache-file ca-certificate-bundle + emacs-subdirs glib-schemas gtk-icon-themes gtk-im-modules diff --git a/guix/status.scm b/guix/status.scm index 362ae2882c..2683678201 100644 --- a/guix/status.scm +++ b/guix/status.scm @@ -379,6 +379,8 @@ the current build phase." (G_ "building GHC package cache...")) ('ca-certificate-bundle (G_ "building CA certificate bundle...")) + ('emacs-subdirs + (G_ "listing Emacs subdirs...")) ('glib-schemas (G_ "generating GLib schema cache...")) ('gtk-icon-themes -- 2.31.1
With this, the search path specification of EMACSLOADPATH does no longer depend on the version of Emacs, which should make upgrading major versions less painful. See also: - <https://bugs.gnu.org/43627> - <https://bugs.gnu.org/47458> * gnu/packages/emacs.scm (emacs)[#:phases]: Add ‘wrap-load-path’. [native-search-path]<EMACSLOADPATH>: Do not search for builtin libraries. (emacs-next)[native-search-path]: Inherit from emacs. --- gnu/packages/emacs.scm | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index 7447cfe33a..e1b01ac22b 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -201,6 +201,24 @@ (car (find-files "bin" "^emacs-([0-9]+\\.)+[0-9]+$")) "bin/emacs") #t))) + (add-after 'strip-double-wrap 'wrap-load-path + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (lisp-dirs (find-files (string-append out "/share/emacs") + "^lisp$" + #:directories? #t))) + (for-each + (lambda (prog) + (wrap-program prog + `("EMACSLOADPATH" suffix ,lisp-dirs))) + (find-files (string-append out "/bin") + ;; Matches versioned and unversioned emacs binaries. + ;; We don't patch emacsclient, because it takes its + ;; environment variables from emacs. + ;; Likewise, we don't need to patch helper binaries + ;; like etags, ctags or ebrowse. + "^emacs(-[0-9]+(\\.[0-9]+)*)?$")) + #t))) (add-before 'reset-gzip-timestamps 'make-compressed-files-writable ;; The 'reset-gzip-timestamps phase will throw a permission error ;; if gzip files aren't writable then. This phase is needed when @@ -255,9 +273,7 @@ (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/" version "/lisp")))) + (files '("share/emacs/site-lisp"))) (search-path-specification (variable "INFOPATH") (files '("share/info"))))) @@ -294,18 +310,7 @@ languages.") "0igjm9kwiswn2dpiy2k9xikbdfc7njs07ry48fqz70anljj8y7y3")))) (native-inputs `(("autoconf" ,autoconf) - ,@(package-native-inputs emacs))) - (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/" - (version-major+minor+point version) - "/lisp")))) - (search-path-specification - (variable "INFOPATH") - (files '("share/info")))))))) + ,@(package-native-inputs emacs)))))) (define-public emacs-next-pgtk (let ((commit "ae18c8ec4f0ef37c8c9cda473770ff47e41291e2") -- 2.31.1
Some parts of Emacs (dired, compression handling, Tramp) shell out to commands and patching them all is a daunting task. Also, w.r.t. Tramp, we need those commands to be portable across multiple machines, which need not only be Guix machines (and even if they are, store items can be different). This patch ensures a ‘sane’ setup FSVO ‘sane’. * gnu/packages/emacs.scm (emacs)[wrap-load-path]: Rename to... [wrap-emacs-paths] ... this. Also patch PATH. --- gnu/packages/emacs.scm | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm index e1b01ac22b..5316d25151 100644 --- a/gnu/packages/emacs.scm +++ b/gnu/packages/emacs.scm @@ -201,8 +201,8 @@ (car (find-files "bin" "^emacs-([0-9]+\\.)+[0-9]+$")) "bin/emacs") #t))) - (add-after 'strip-double-wrap 'wrap-load-path - (lambda* (#:key outputs #:allow-other-keys) + (add-after 'strip-double-wrap 'wrap-emacs-paths + (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (lisp-dirs (find-files (string-append out "/share/emacs") "^lisp$" @@ -210,6 +210,13 @@ (for-each (lambda (prog) (wrap-program prog + ;; emacs-next and variants rely on uname being in PATH for + ;; Tramp. Tramp paths can't be hardcoded, because they + ;; need to be portable. + `("PATH" suffix + ,(map (lambda (in) (string-append in "/bin")) + (list (assoc-ref inputs "gzip") + (assoc-ref inputs "coreutils")))) `("EMACSLOADPATH" suffix ,lisp-dirs))) (find-files (string-append out "/bin") ;; Matches versioned and unversioned emacs binaries. @@ -231,6 +238,10 @@ `(("gnutls" ,gnutls) ("ncurses" ,ncurses) + ;; Required for "core" functionality, such as dired and compression. + ("coreutils" ,coreutils) + ("gzip" ,gzip) + ;; Avoid Emacs's limited movemail substitute that retrieves POP3 email ;; only via insecure channels. This is not needed for (modern) IMAP. ("mailutils" ,mailutils) @@ -361,7 +372,9 @@ also enabled and works without glitches even on X server.")))) (delete 'strip-double-wrap))))) (inputs `(("guix-emacs.el" ,(search-auxiliary-file "emacs/guix-emacs.el")) - ("ncurses" ,ncurses))) + ("ncurses" ,ncurses) + ("coreutils" ,coreutils) + ("gzip" ,gzip))) (native-inputs `(("pkg-config" ,pkg-config))))) -- 2.31.1
With this, Emacs libraries are installed in the ELPA_NAME-VERSION subdirectory of site-lisp and potential subdirectories should no longer collide. * guix/build/emacs-build-system.scm (add-source-to-load-path): Rename to... (expand-load-path): ... this. Also expand lone subdirectories of site-lisp. (%standard-phases): Adjust accordingly. (elpa-directory): New variable. Export it publicly for use in other build systems. (build, patch-el-files, make-autoloads): Use ELPA name and version to construct subdirectories of %install-dir. (install): Install in subdirectory. --- guix/build/emacs-build-system.scm | 70 ++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 25 deletions(-) diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm index 26ea59bc25..ae0f2e569e 100644 --- a/guix/build/emacs-build-system.scm +++ b/guix/build/emacs-build-system.scm @@ -26,13 +26,16 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) + #:use-module (ice-9 format) + #:use-module (ice-9 ftw) #:use-module (ice-9 rdelim) #:use-module (ice-9 regex) #:use-module (ice-9 match) #:export (%standard-phases %default-include %default-exclude - emacs-build)) + emacs-build + elpa-directory)) ;; Commentary: ;; @@ -73,33 +76,43 @@ archive, a directory, or an Emacs Lisp file." #t) (gnu:unpack #:source source))) -(define* (add-source-to-load-path #:key dummy #:allow-other-keys) - "Augment the EMACSLOADPATH environment variable with the source directory." +(define* (expand-load-path #:key (prepend-source? #t) #:allow-other-keys) + "Expand EMACSLOADPATH, so that inputs, whose code resides in subdirectories, +are properly found. +If @var{prepend-source?} is @code{#t} (the default), also add the current +directory to EMACSLOADPATH in front of any other directories." (let* ((source-directory (getcwd)) (emacs-load-path (string-split (getenv "EMACSLOADPATH") #\:)) - ;; XXX: Make sure the Emacs core libraries appear at the end of - ;; EMACSLOADPATH, to avoid shadowing any other libraries depended - ;; upon. - (emacs-load-path-non-core (filter (cut string-contains <> - "/share/emacs/site-lisp") - emacs-load-path)) + (emacs-load-path* + (map + (lambda (dir) + (match (scandir dir (negate (cute member <> '("." "..")))) + ((sub) (string-append dir "/" sub)) + (_ dir))) + emacs-load-path)) (emacs-load-path-value (string-append - (string-join (cons source-directory - emacs-load-path-non-core) - ":") + (string-join + (if prepend-source? + (cons source-directory emacs-load-path*) + emacs-load-path*) + ":") ":"))) (setenv "EMACSLOADPATH" emacs-load-path-value) - (format #t "source directory ~s prepended to the `EMACSLOADPATH' \ -environment variable\n" source-directory))) + (when prepend-source? + (format #t "source directory ~s prepended to the `EMACSLOADPATH' \ +environment variable\n" source-directory)) + (let ((diff (lset-difference string=? emacs-load-path* emacs-load-path))) + (unless (null? diff) + (format #t "expanded load paths for ~{~a~^, ~}\n" + (map basename diff)))))) (define* (build #:key outputs inputs #:allow-other-keys) "Compile .el files." (let* ((emacs (string-append (assoc-ref inputs "emacs") "/bin/emacs")) - (out (assoc-ref outputs "out")) - (site-lisp (string-append out %install-dir))) + (out (assoc-ref outputs "out"))) (setenv "SHELL" "sh") (parameterize ((%emacs emacs)) - (emacs-byte-compile-directory site-lisp)))) + (emacs-byte-compile-directory (elpa-directory out))))) (define* (patch-el-files #:key outputs #:allow-other-keys) "Substitute the absolute \"/bin/\" directory with the right location in the @@ -116,7 +129,8 @@ store in '.el' files." #:binary #t)) (let* ((out (assoc-ref outputs "out")) - (site-lisp (string-append out %install-dir)) + (elpa-name-ver (store-directory->elpa-name-version out)) + (el-dir (string-append out %install-dir "/" elpa-name-ver)) ;; (ice-9 regex) uses libc's regexp routines, which cannot deal with ;; strings containing NULs. Filter out such files. TODO: Remove ;; this workaround when <https://bugs.gnu.org/30116> is fixed. @@ -130,7 +144,7 @@ store in '.el' files." (error "patch-el-files: unable to locate " cmd-name)) (string-append "\"" cmd "\""))))) - (with-directory-excursion site-lisp + (with-directory-excursion el-dir ;; Some old '.el' files (e.g., tex-buf.el in AUCTeX) are still ;; ISO-8859-1-encoded. (unless (false-if-exception (substitute-program-names)) @@ -181,14 +195,14 @@ parallel. PARALLEL-TESTS? is ignored when using a non-make TEST-COMMAND." (not (any (cut match-stripped-file "excluded" <>) exclude))))) (let* ((out (assoc-ref outputs "out")) - (site-lisp (string-append out %install-dir)) + (el-dir (elpa-directory out)) (files-to-install (find-files source install-file?))) (cond ((not (null? files-to-install)) (for-each (lambda (file) (let* ((stripped-file (string-drop file (string-length source))) - (target-file (string-append site-lisp stripped-file))) + (target-file (string-append el-dir stripped-file))) (format #t "`~a' -> `~a'~%" file target-file) (install-file file (dirname target-file)))) files-to-install) @@ -219,11 +233,11 @@ parallel. PARALLEL-TESTS? is ignored when using a non-make TEST-COMMAND." "Generate the autoloads file." (let* ((emacs (string-append (assoc-ref inputs "emacs") "/bin/emacs")) (out (assoc-ref outputs "out")) - (site-lisp (string-append out %install-dir)) (elpa-name-ver (store-directory->elpa-name-version out)) - (elpa-name (package-name->name+version elpa-name-ver))) + (elpa-name (package-name->name+version elpa-name-ver)) + (el-dir (elpa-directory out))) (parameterize ((%emacs emacs)) - (emacs-generate-autoloads elpa-name site-lisp)))) + (emacs-generate-autoloads elpa-name el-dir)))) (define* (enable-autoloads-compilation #:key outputs #:allow-other-keys) "Remove the NO-BYTE-COMPILATION local variable embedded in the generated @@ -258,10 +272,16 @@ second hyphen. This corresponds to 'name-version' as used in ELPA packages." strip-store-file-name) store-dir)) +(define (elpa-directory store-dir) + "Given the store directory STORE-DIR return the absolute install directory +for libraries following the ELPA convention." + (string-append store-dir %install-dir "/" + (store-directory->elpa-name-version store-dir))) + (define %standard-phases (modify-phases gnu:%standard-phases (replace 'unpack unpack) - (add-after 'unpack 'add-source-to-load-path add-source-to-load-path) + (add-after 'unpack 'expand-load-path expand-load-path) (delete 'bootstrap) (delete 'configure) (delete 'build) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-libgit)[set-libgit--module-file]: Use elpa-directory for libgit--module-file path. --- gnu/packages/emacs-xyz.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 7548c26eab..9f96a22e09 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -503,7 +503,7 @@ on stdout instead of using a socket as the Emacsclient does.") (make-file-writable "libgit.el") (emacs-substitute-variables "libgit.el" ("libgit--module-file" - (string-append out "/share/emacs/site-lisp/libegit2.so"))) + (string-append (emacs:elpa-directory out) "/libegit2.so"))) #t))) (add-before 'install 'prepare-for-install (lambda _ -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-guix)[#:phases]: Add expand-load-path. [#:configure-flags]: Install to elpa-directory. --- gnu/packages/emacs-xyz.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 9f96a22e09..f825436f5e 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -3034,6 +3034,23 @@ type, for example: packages, buffers, files, etc.") (base32 "1pqw7zbgxzwpig4xr0izc3z8h80c72i6bl5yi12br0d7aq6dbkvj")))) (build-system gnu-build-system) + (arguments + `(#:modules ((guix build gnu-build-system) + ((guix build emacs-build-system) #:prefix emacs:) + (guix build utils)) + #:imported-modules (,@%gnu-build-system-modules + (guix build emacs-build-system) + (guix build emacs-utils)) + #:configure-flags + (list (string-append "--with-lispdir=" + (emacs:elpa-directory (assoc-ref %outputs "out")))) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'expand-load-path + (lambda _ + ((assoc-ref emacs:%standard-phases 'expand-load-path) + #:prepend-source? #f) + #t))))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) -- 2.31.1
* gnu/packages/emacs-telega.scm (emacs-telega)[#:phases]: Reorder. <telega-paths-patch>: Rename to... <patch-sources>: ... this. Also don't patch paths to subdirs. Remove the snippet, that would push contrib to the load path. <server-suite-patch>: Rename to... <patch-test-suite>: ... this. <emacs-install>: Also install etc. <emacs-bytecomp-contrib, telega-install-contrib, telega-install-data>: Removed phases. --- gnu/packages/emacs-xyz.scm | 62 +++++++++----------------------------- 1 file changed, 15 insertions(+), 47 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index f825436f5e..6740657eb0 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -25206,7 +25206,9 @@ other @code{helm-type-file} sources such as @code{helm-locate}.") (("python3 run_tests.py") "")) #t)) - (add-after 'check 'telega-paths-patch + (add-after 'unpack 'expand-load-path + (assoc-ref emacs:%standard-phases 'expand-load-path)) + (add-after 'unpack 'patch-sources (lambda* (#:key inputs #:allow-other-keys) ;; Hard-code paths to `ffplay` and `ffmpeg`. (let ((ffplay-bin (string-append (assoc-ref inputs "ffmpeg") @@ -25222,24 +25224,15 @@ other @code{helm-type-file} sources such as @code{helm-locate}.") (string-append "(and (file-executable-p \"" ffmpeg-bin "\")" "\"" ffmpeg-bin "\")")))) - ;; Modify telega-util to reflect unique dir name in - ;; `telega-install-data' phase. - (substitute* "telega-util.el" - (("\\(concat \"etc/\" filename\\) telega--lib-directory") - "(concat \"telega-data/\" filename) - (locate-dominating-file telega--lib-directory - \"telega-data\")")) - ;; Modify telega.el to reflect unique dir name in - ;; `telega-install-contrib' phase. + ;; This would push the "contrib" sources to the load path, + ;; but as contrib is not installed alongside telega, it does + ;; nothing. (substitute* "telega.el" - (("\\(push \\(expand-file-name \"contrib\" telega--lib-directory\\) load-path\\)") - "(push (expand-file-name \"telega-contrib\" - (locate-dominating-file telega--lib-directory - \"telega-contrib\")) load-path)")) + (("\\(push .* load-path\\)") "")) #t)) ;; The server test suite has a hardcoded path. ;; Reset this behavior to use the proper path. - (add-after 'unpack 'server-suite-patch + (add-after 'unpack 'patch-test-suite (lambda _ (substitute* "server/run_tests.py" (("~/.telega/telega-server") @@ -25251,39 +25244,14 @@ other @code{helm-type-file} sources such as @code{helm-locate}.") (invoke "python3" "server/run_tests.py") #t)) (delete 'configure) - ;; Build emacs-side using `emacs-build-system' - (add-after 'compress-documentation 'emacs-add-source-to-load-path - (assoc-ref emacs:%standard-phases 'add-source-to-load-path)) - ;; Manually invoke bytecompilation for the contrib - ;; subdirectory. - (add-after 'emacs-add-source-to-load-path 'emacs-bytecomp-contrib - (lambda _ - (substitute* "Makefile" - (("byte-recompile-directory \".\"") - "byte-recompile-directory \"contrib\"")) - (invoke "make" "compile") - #t)) - (add-after 'emacs-bytecomp-contrib 'emacs-install - (assoc-ref emacs:%standard-phases 'install)) - ;; This step installs subdir /etc, which contains images, sounds and - ;; various other data, next to the site-lisp dir. - (add-after 'emacs-install 'telega-install-data - (lambda* (#:key outputs #:allow-other-keys) - (copy-recursively - "etc" - (string-append (assoc-ref outputs "out") - "/share/emacs/telega-data/")) - #t)) - (add-after 'emacs-install 'telega-install-contrib - (lambda* (#:key outputs #:allow-other-keys) - (copy-recursively - "contrib" - (string-append (assoc-ref outputs "out") - "/share/emacs/telega-contrib")) - #t)) - (add-after 'telega-install-contrib 'emacs-build + (add-after 'expand-load-path 'emacs-install + (lambda args + (apply (assoc-ref emacs:%standard-phases 'install) + #:include `("etc" ,@emacs:%default-include) + args))) + (add-after 'emacs-install 'emacs-build (assoc-ref emacs:%standard-phases 'build)) - (add-after 'telega-install-contrib 'emacs-make-autoloads + (add-after 'emacs-install 'emacs-make-autoloads (assoc-ref emacs:%standard-phases 'make-autoloads))))) (inputs `(("ffmpeg" ,ffmpeg))) ; mp4/gif support. -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-telega-contrib): New variable. --- gnu/packages/emacs-xyz.scm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 6740657eb0..32492a5535 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -25277,6 +25277,21 @@ Telegram messaging platform.") (home-page "https://zevlg.github.io/telega.el/") (license license:gpl3+)))) +(define-public emacs-telega-contrib + (package/inherit emacs-telega + (name "emacs-telega-contrib") + (build-system emacs-build-system) + (arguments + `(#:exclude '("telega-live-location.el") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'chdir + (lambda _ (chdir "contrib") #t))))) + (propagated-inputs + `(("emacs-telega" ,emacs-telega) + ("emacs-alert" ,emacs-alert) + ("emacs-all-the-icons" ,emacs-all-the-icons))))) + (define-public emacs-doom-modeline (package (name "emacs-doom-modeline") -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-emacsql)[#:phases]: Use standard build and install phases. [build-emacsql-sqlite]: Use cc-for-target. --- gnu/packages/emacs-xyz.scm | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 32492a5535..360c7d0a2b 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -15565,7 +15565,6 @@ object has been freed.") (srfi srfi-26)) #:phases (modify-phases %standard-phases - (delete 'build) ;‘build-emacsql-sqlite’ compiles ‘*.el’ files. (add-before 'install 'patch-elisp-shell-shebangs (lambda _ (substitute* (find-files "." "\\.el") @@ -15576,7 +15575,7 @@ object has been freed.") (setenv "SHELL" "sh"))) (add-after 'setenv-shell 'build-emacsql-sqlite (lambda _ - (invoke "make" "binary" "CC=gcc"))) + (invoke "make" "binary" (string-append "CC=" ,(cc-for-target))))) (add-after 'build-emacsql-sqlite 'install-emacsql-sqlite ;; This build phase installs emacs-emacsql binary. (lambda* (#:key outputs #:allow-other-keys) @@ -15597,16 +15596,7 @@ object has been freed.") ;; in the right place. ("(defvar emacsql-sqlite-executable" (string-append (assoc-ref outputs "out") - "/bin/emacsql-sqlite")))))) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out"))) - (install-file "sqlite/emacsql-sqlite" - (string-append out "/bin")) - (for-each (cut install-file <> - (string-append out "/share/emacs/site-lisp")) - (find-files "." "\\.elc*$"))) - #t))))) + "/bin/emacsql-sqlite"))))))))) (inputs `(("emacs-minimal" ,emacs-minimal) ("mariadb" ,mariadb "lib") -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-howm)[#:configure-flags]: Install to elpa-directory. --- gnu/packages/emacs-xyz.scm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 360c7d0a2b..66a981cae6 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -2373,8 +2373,7 @@ a set of simplified face specifications and a user-supplied color palette") `(("emacs" ,emacs-minimal))) (arguments `(#:configure-flags - (list (string-append "--with-howmdir=" %output - "/share/emacs/site-lisp/")) + (list (string-append "--with-howmdir=" (emacs:elpa-directory %output))) #:modules ((guix build gnu-build-system) ((guix build emacs-build-system) #:prefix emacs:) (guix build utils)) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-ert-runner)[install-executable]: Use elpa-directory for the value of ERT_RUNNER. --- gnu/packages/emacs-xyz.scm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 66a981cae6..626ad5e329 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -13256,8 +13256,7 @@ variable instead, to remind you of that variable's meaning.") (getenv "TMPDIR") "/source"))) (substitute* "bin/ert-runner" (("ERT_RUNNER=\"\\$\\(dirname \\$\\(dirname \\$0\\)\\)") - (string-append "ERT_RUNNER=\"" out - "/share/emacs/site-lisp"))) + (string-append "ERT_RUNNER=\"" (elpa-directory out)))) (install-file "bin/ert-runner" (string-append out "/bin")) (wrap-program (string-append out "/bin/ert-runner") (list "EMACSLOADPATH" ":" 'prefix -- 2.31.1
From: Xinglu Chen <public@yoctocell.xyz> * gnu/packages/emacs-xyz.scm (emacs-pdf-tools)[#:phases]: Rename 'emacs-add-source-to-load-path' to 'emacs-expand-load-path'. Use expand-load-path, which replaces add-source-to-load-path. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/packages/emacs-xyz.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 626ad5e329..0f8b7654ba 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -2942,8 +2942,8 @@ during idle time, while Emacs is doing nothing else.") ;; upgrading" that pdf-tools tries to perform. (emacs-substitute-variables "pdf-tools.el" ("pdf-tools-handle-upgrades" '())))) - (add-after 'emacs-patch-variables 'emacs-add-source-to-load-path - (assoc-ref emacs:%standard-phases 'add-source-to-load-path)) + (add-after 'emacs-patch-variables 'emacs-expand-load-path + (assoc-ref emacs:%standard-phases 'expand-load-path)) (add-after 'emacs-add-source-to-load-path 'emacs-install (assoc-ref emacs:%standard-phases 'install)) (add-after 'emacs-install 'emacs-build -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-shroud)[#:phases]: Add ‘expand-load-path’. [#:configure-flags]: Use elpa-directory for lispdir. --- gnu/packages/emacs-xyz.scm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 0f8b7654ba..ed22832fcb 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -1074,6 +1074,19 @@ for editing Racket's Scribble documentation syntax in Emacs.") (sha256 (base32 "0q2pb3w8s833fjhkzicciw2php4lsnismad1dnwgp2lcway757ra")))) (build-system gnu-build-system) + (arguments + `(#:modules ((guix build gnu-build-system) + ((guix build emacs-build-system) #:prefix emacs:) + (guix build utils)) + #:imported-modules (,@%gnu-build-system-modules + (guix build emacs-build-system) + (guix build emacs-utils)) + #:configure-flags (list (string-append "--with-lispdir=" + (emacs:elpa-directory %output))) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'expand-load-path + (assoc-ref emacs:%standard-phases 'expand-load-path))))) (native-inputs `(("autoconf" ,autoconf) ("automake" ,automake) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-sly-stepper)[#:phases]: <add-contrib-to-emacs-load-path>: Rename to... <expand-sly-contrib>: ... this. Use find-files to find contrib directory. <install>: Find slynk-stepper.lisp in elpa-directory. --- gnu/packages/emacs-xyz.scm | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index ed22832fcb..9ffae08600 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -10408,24 +10408,26 @@ inside the source file.") (propagated-inputs `(("emacs-sly" ,emacs-sly))) (arguments - '(#:include (cons* "\\.lisp$" "\\.asd$" %default-include) + `(#:include (cons* "\\.lisp$" "\\.asd$" %default-include) #:phases (modify-phases %standard-phases ;; The package provides autoloads. (delete 'make-autoloads) (delete 'enable-autoloads-compilation) - (add-after 'add-source-to-load-path 'add-contrib-to-emacs-load-path + (add-after 'expand-load-path 'expand-sly-contrib (lambda* (#:key inputs #:allow-other-keys) - (let ((sly (assoc-ref inputs "emacs-sly"))) + (let* ((sly (assoc-ref inputs "emacs-sly")) + (contrib (find-files sly "^contrib$" #:directories? #t))) (setenv "EMACSLOADPATH" - (string-append sly "/share/emacs/site-lisp/contrib:" - (getenv "EMACSLOADPATH")))) - #t)) + (string-append (string-join contrib ":") + ":" + (getenv "EMACSLOADPATH"))) + #t))) (add-after 'install 'find-agnostic-lizard (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) - (file (string-append out "/share/emacs/site-lisp/" - "slynk-stepper.lisp")) + (file (string-append (elpa-directory out) + "/slynk-stepper.lisp")) (asd (string-append (assoc-ref inputs "cl-agnostic-lizard") "/share/common-lisp/systems/agnostic-lizard.asd"))) -- 2.31.1
* gnu/packages/emacs-xyz.scm (sly-stepper)[source]: Add snippet to remove autoloads. [#:phases]: Do not delete ‘make-autoloads’ or ‘enable-autoloads-compilation’. --- gnu/packages/emacs-xyz.scm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 9ffae08600..76b7517566 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -10401,7 +10401,12 @@ inside the source file.") (file-name (git-file-name name version)) (sha256 (base32 - "1hxniaxifdw3m4y4yssgy22xcmmf558wx7rpz66wy5hwybjslf7b")))) + "1hxniaxifdw3m4y4yssgy22xcmmf558wx7rpz66wy5hwybjslf7b")) + (modules '((guix build utils))) + (snippet + '(begin + (map delete-file (find-files "." ".*-autoloads\\.elc?$")) + #t)))) (build-system emacs-build-system) (inputs `(("cl-agnostic-lizard" ,cl-agnostic-lizard))) @@ -10411,9 +10416,6 @@ inside the source file.") `(#:include (cons* "\\.lisp$" "\\.asd$" %default-include) #:phases (modify-phases %standard-phases - ;; The package provides autoloads. - (delete 'make-autoloads) - (delete 'enable-autoloads-compilation) (add-after 'expand-load-path 'expand-sly-contrib (lambda* (#:key inputs #:allow-other-keys) (let* ((sly (assoc-ref inputs "emacs-sly")) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-org-contrib)[delete-org-files]: Excurse into elpa-directory. --- gnu/packages/emacs-xyz.scm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 76b7517566..fd38b70c59 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -11191,8 +11191,7 @@ programming and reproducible research.") (duplicates (lset-intersection string=? contrib-files org+contrib-files))) - (with-directory-excursion - (string-append out "/share/emacs/site-lisp") + (with-directory-excursion (elpa-directory out) (for-each delete-file duplicates)) #t)))))) (propagated-inputs -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-edbi)[patch-path]: Execute after unpack. [wrap-edbi-bridge]: New phase (after wrap). Find edbi-bridge in elpa-directory. --- gnu/packages/emacs-xyz.scm | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index fd38b70c59..00a3368620 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -21494,17 +21494,21 @@ asynchronous communications, the RPC response is fairly good.") `(#:include '("\\.el$" "\\.pl$") #:phases (modify-phases %standard-phases - (add-after 'install 'patch-path - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((perl (assoc-ref inputs "perl")) - (dir (string-append (assoc-ref outputs "out") - "/share/emacs/site-lisp"))) - (substitute* (string-append dir "/edbi.el") + (add-after 'unpack 'patch-path + (lambda* (#:key inputs #:allow-other-keys) + (let ((perl (assoc-ref inputs "perl"))) + (substitute* "edbi.el" (("\"perl\"") (string-append "\"" perl "/bin/perl\""))) - (chmod (string-append dir "/edbi-bridge.pl") #o555) - (wrap-program (string-append dir "/edbi-bridge.pl") - `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB")))) - #t)))))) + #t))) + (add-after 'wrap 'wrap-edbi-bridge + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bridge (string-append (elpa-directory out) + "/edbi-bridge.pl"))) + (chmod bridge #o555) + (wrap-program bridge + `("PERL5LIB" ":" prefix (,(getenv "PERL5LIB"))))) + #t))))) (synopsis "Database Interface for Emacs Lisp") (description "This program connects the database server through Perl's DBI, and provides DB-accessing API and the simple management UI.") -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-scel)[#:phases]<configure>: Use elpa-directory. <add-el-dir-to-emacs-load-path>: Adjust location. --- gnu/packages/emacs-xyz.scm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 00a3368620..90031faf15 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -6138,12 +6138,11 @@ to a key in your preferred mode.") (lambda* (#:key outputs #:allow-other-keys) (substitute* "el/CMakeLists.txt" (("share/emacs/site-lisp/SuperCollider") - (string-append - "share/emacs/site-lisp"))) + (elpa-directory (assoc-ref outputs "out")))) ((assoc-ref cmake:%standard-phases 'configure) #:outputs outputs #:configure-flags '("-DSC_EL_BYTECOMPILE=OFF")))) - (add-after 'add-source-to-load-path 'add-el-dir-to-emacs-load-path + (add-after 'expand-load-path 'add-el-dir-to-emacs-load-path (lambda _ (setenv "EMACSLOADPATH" (string-append (getcwd) "/el:" (getenv "EMACSLOADPATH"))) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-vterm)[substitute-vterm-module-path]: Move after ‘unpack’. --- gnu/packages/emacs-xyz.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 90031faf15..3dbb37e377 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -21660,7 +21660,7 @@ stored playlists.") (guix build cmake-build-system)) #:phases (modify-phases %standard-phases - (add-before 'add-source-to-load-path 'substitute-vterm-module-path + (add-after 'unpack 'substitute-vterm-module-path (lambda* (#:key outputs #:allow-other-keys) (chmod "vterm.el" #o644) (emacs-substitute-sexps "vterm.el" -- 2.31.1
* gnu/packages/mail.scm (notmuch)[configure]: Use elpa-directory. --- gnu/packages/mail.scm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index c8f29b80d6..43dec741a0 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1362,8 +1362,7 @@ invoking @command{notifymuch} from the post-new hook.") (setenv "CONFIG_SHELL" (which "sh")) (let* ((out (assoc-ref outputs "out")) - (elisp - (string-append out "/share/emacs/site-lisp/"))) + (elisp (emacs:elpa-directory out))) (invoke "./configure" (string-append "--prefix=" out) (string-append "--emacslispdir=" elisp) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-pyim): Update to 3.6. --- gnu/packages/emacs-xyz.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 3dbb37e377..40ab1f38a1 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -12657,13 +12657,13 @@ containing words from the Rime project.") (define-public emacs-pyim (package (name "emacs-pyim") - (version "3.2") + (version "3.6") (source (origin (method url-fetch) (uri (string-append "https://elpa.gnu.org/packages/pyim-" version ".tar")) (sha256 - (base32 "1rr9mq334dqf7mx1ii7910zkigw7chl63iws4sw0qsn014kjlb0a")))) + (base32 "1fmbzh33s9xdvrfjhkqr9ydcqbiv8lr04k5idvbpc9vwjjjan5y0")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-async" ,emacs-async) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-realgud)[fix-autogen-script]: Move after ‘expand-load-path’. --- gnu/packages/emacs-xyz.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 40ab1f38a1..0dc7b8961b 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -7759,7 +7759,7 @@ after buffer changes.") "(require-relative-list \ '(\"../../common/run\") \"realgud:\")\n"))) #t)) - (add-after 'unpack 'fix-autogen-script + (add-after 'expand-load-path 'fix-autogen-script (lambda _ (substitute* "autogen.sh" (("./configure") "sh configure")) -- 2.31.1
From: Morgan Smith <Morgan.J.Smith@outlook.com> * gnu/packages/patches/emacs-geiser-autoload-activate-implementation.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it here. * gnu/packages/emacs-xyz.scm (emacs-geiser): Update to 0.13. [source]: Change upstream URL. [build-system]: Change to emacs-build-system. [arguments]: Adjust accordingly. [native-inputs]: Remove emacs, autoconf, and automake. [description]: State that other packages are needed for geiser to be useful. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/local.mk | 1 + gnu/packages/emacs-xyz.scm | 46 +++++++++++-------- ...ser-autoload-activate-implementation.patch | 26 +++++++++++ 3 files changed, 54 insertions(+), 19 deletions(-) create mode 100644 gnu/packages/patches/emacs-geiser-autoload-activate-implementation.patch diff --git a/gnu/local.mk b/gnu/local.mk index 50b11a8ca2..393fa61bf5 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -968,6 +968,7 @@ dist_patch_DATA = \ %D%/packages/patches/emacs-exec-path.patch \ %D%/packages/patches/emacs-exwm-fix-fullscreen-states.patch \ %D%/packages/patches/emacs-fix-scheme-indent-function.patch \ + %D%/packages/patches/emacs-geiser-autoload-activate-implementation.patch \ %D%/packages/patches/emacs-ignore-empty-xim-styles.patch \ %D%/packages/patches/emacs-json-reformat-fix-tests.patch \ %D%/packages/patches/emacs-highlight-stages-add-gexp.patch \ diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 0dc7b8961b..85295524a5 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -219,43 +219,51 @@ (define-public emacs-geiser (package (name "emacs-geiser") - (version "0.12") + (version "0.13") (source (origin (method git-fetch) (uri (git-reference - (url "https://gitlab.com/jaor/geiser/") + (url "https://gitlab.com/emacs-geiser/geiser.git") (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "0n718xpys7v94zaf9lpmsx97qgn6qxif1acr718wyvpmfr4hiv08")))) - (build-system gnu-build-system) + (base32 "0bwjcfmcyv6z0i5ivqirgcibxdkrlf5vyxcbj7k8dk7flwg1fpd9")) + (patches + (search-patches "emacs-geiser-autoload-activate-implementation.patch")))) + (build-system emacs-build-system) (arguments '(#:phases (modify-phases %standard-phases - (add-after 'install 'post-install - (lambda* (#:key outputs #:allow-other-keys) - (symlink "geiser-install.el" - (string-append (assoc-ref outputs "out") - "/share/emacs/site-lisp/" - "geiser-autoloads.el")) - #t))))) - (inputs - `(("guile" ,guile-2.2))) + ;; Move the source files to the top level, which is included in + ;; the EMACSLOADPATH. + (add-after 'unpack 'move-source-files + (lambda _ + (let ((el-files (find-files "./elisp" ".*\\.el$"))) + (for-each (lambda (f) + (rename-file f (basename f))) + el-files)) + #t)) + (add-before 'install 'make-info + (lambda _ + (with-directory-excursion "doc" + (invoke "makeinfo" "--no-split" + "-o" "geiser.info" "geiser.texi"))))))) (native-inputs - `(("emacs" ,emacs-minimal) - ("autoconf" ,autoconf) - ("automake" ,automake) - ("texinfo" ,texinfo))) + `(("texinfo" ,texinfo))) (home-page "https://nongnu.org/geiser/") - (synopsis "Collection of Emacs modes for Guile and Racket hacking") + (synopsis "Collection of Emacs modes for Scheme hacking") (description "Geiser is a collection of Emacs major and minor modes that conspire with one or more Scheme implementations to keep the Lisp Machine Spirit alive. The continuously running Scheme interpreter takes the center of the stage in Geiser. A bundle of Elisp shims orchestrates the dialog between the Scheme implementation, Emacs and, ultimately, the schemer, giving them access to live -metadata.") +metadata. + +This package provides just the core of Geiser. To effectively use it with your +favourite Scheme implementation, you also need the corresponding geiser package, +e.g. emacs-geiser-guile for Guile.") (license license:bsd-3))) (define-public emacs-ac-geiser diff --git a/gnu/packages/patches/emacs-geiser-autoload-activate-implementation.patch b/gnu/packages/patches/emacs-geiser-autoload-activate-implementation.patch new file mode 100644 index 0000000000..47d513b3a3 --- /dev/null +++ b/gnu/packages/patches/emacs-geiser-autoload-activate-implementation.patch @@ -0,0 +1,26 @@ +From 9fd3174cead8bfa17a8413bffa38362853d71a02 Mon Sep 17 00:00:00 2001 +From: jao <jao@gnu.org> +Date: Mon, 5 Apr 2021 23:06:56 +0100 +Subject: [PATCH] autoload geiser activate implementation + +--- + elisp/geiser.el | 3 +++ + readme.org | 4 ++-- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/elisp/geiser.el b/elisp/geiser.el +index 887b8da..96c1dd6 100644 +--- a/elisp/geiser.el ++++ b/elisp/geiser.el +@@ -104,6 +104,9 @@ + ;;;###autoload + (autoload 'geiser-mode--maybe-activate "geiser-mode") + ++;;;###autoload ++(autoload 'geiser-activate-implementation "geiser-impl") ++ + ;;;###autoload + (mapc (lambda (group) + (custom-add-load group (symbol-name group)) +-- +GitLab -- 2.31.1
From: Morgan Smith <Morgan.J.Smith@outlook.com> * gnu/packages/patches/emacs-geiser-guile-auto-activate.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it here. * gnu/packages/emacs-xyz.scm (emacs-geiser-guile): New variable. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/local.mk | 1 + gnu/packages/emacs-xyz.scm | 42 +++++++++++++++++++ .../emacs-geiser-guile-auto-activate.patch | 34 +++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 gnu/packages/patches/emacs-geiser-guile-auto-activate.patch diff --git a/gnu/local.mk b/gnu/local.mk index 393fa61bf5..9c632fc2d7 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -968,6 +968,7 @@ dist_patch_DATA = \ %D%/packages/patches/emacs-exec-path.patch \ %D%/packages/patches/emacs-exwm-fix-fullscreen-states.patch \ %D%/packages/patches/emacs-fix-scheme-indent-function.patch \ + %D%/packages/patches/emacs-geiser-guile-auto-activate.patch \ %D%/packages/patches/emacs-geiser-autoload-activate-implementation.patch \ %D%/packages/patches/emacs-ignore-empty-xim-styles.patch \ %D%/packages/patches/emacs-json-reformat-fix-tests.patch \ diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 85295524a5..38b3ed0687 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -266,6 +266,48 @@ favourite Scheme implementation, you also need the corresponding geiser package, e.g. emacs-geiser-guile for Guile.") (license license:bsd-3))) +(define-public emacs-geiser-guile + (package + (name "emacs-geiser-guile") + (version "0.13") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/emacs-geiser/guile.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0w264pjwlxna31260ll6gd0n77jlynhzf3h2dws5wr7jflns5mbc")) + (patches (search-patches + "emacs-geiser-guile-auto-activate.patch")))) + (build-system emacs-build-system) + (arguments + '(#:include (cons "^src/" %default-include) + #:phases + (modify-phases %standard-phases + (add-after 'make-autoloads 'patch-autoloads + (lambda* (#:key outputs #:allow-other-keys) + (substitute* (string-append + (elpa-directory (assoc-ref outputs "out")) + "/geiser-guile-autoloads.el") + ;; Activating implementations fails when Geiser is not yet + ;; loaded, so let's defer that until it is. + (("\\(geiser-activate-implementation .*\\)" all) + (string-append + "(eval-after-load 'geiser-impl '" all ")"))) + #t))))) + (inputs + `(("guile" ,guile-2.2))) + (propagated-inputs + `(("geiser" ,emacs-geiser))) + (home-page "https://nongnu.org/geiser/") + (synopsis "Guile Scheme support for Geiser") + (description + "This package adds support for the Guile Scheme implementation to Geiser, +a generic Scheme interaction mode for the GNU Emacs editor.") + (license license:bsd-3))) + (define-public emacs-ac-geiser (let ((commit "93818c936ee7e2f1ba1b315578bde363a7d43d05") (revision "0")) diff --git a/gnu/packages/patches/emacs-geiser-guile-auto-activate.patch b/gnu/packages/patches/emacs-geiser-guile-auto-activate.patch new file mode 100644 index 0000000000..44837f90df --- /dev/null +++ b/gnu/packages/patches/emacs-geiser-guile-auto-activate.patch @@ -0,0 +1,34 @@ +From 93ef7101fdfcc7eac6f465b4b9788c384a323c14 Mon Sep 17 00:00:00 2001 +From: jao <jao@gnu.org> +Date: Mon, 5 Apr 2021 20:17:50 +0100 +Subject: [PATCH] fix: auto-activate guile implementation + +--- + geiser-guile.el | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/geiser-guile.el b/geiser-guile.el +index 340442b..deeb76f 100644 +--- a/geiser-guile.el ++++ b/geiser-guile.el +@@ -25,6 +25,7 @@ + (require 'geiser-syntax) + (require 'geiser-custom) + (require 'geiser-repl) ++(require 'geiser-impl) + (require 'geiser-base) + (require 'geiser-eval) + (require 'geiser-edit) +@@ -474,6 +475,9 @@ it spawn a server thread." + + (geiser-impl--add-to-alist 'regexp "\\.scm$" 'guile t) + ++;;;###autoload ++(geiser-activate-implementation 'guile) ++ + ;;;###autoload + (autoload 'run-guile "geiser-guile" "Start a Geiser Guile REPL." t) + +-- +GitLab + -- 2.31.1
From: Morgan Smith <Morgan.J.Smith@outlook.com> * gnu/packages/emacs-xyz.scm (emacs-guix): Update to 0.5.2-4.8ce6d21. [source]: Update upstream URL. [propagated-inputs]: Add emacs-geiser-guile. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/packages/emacs-xyz.scm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 38b3ed0687..46716f9b5d 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -3080,8 +3080,8 @@ type, for example: packages, buffers, files, etc.") (license license:gpl3+))) (define-public emacs-guix - (let* ((commit "a694fdbcedb6edd2239a31d326e475c763ee32f8") - (revision "3")) + (let ((commit "8ce6d219e87c5097abff9ce6f1f5a4293cdfcb31") + (revision "4")) (package (name "emacs-guix") (version (git-version "0.5.2" revision commit)) @@ -3089,12 +3089,12 @@ type, for example: packages, buffers, files, etc.") (method git-fetch) (uri (git-reference ;; TODO: Use the official version when it has a new home - (url "https://github.com/jsoo1/guix.el") + (url "https://github.com/alezost/guix.el") (commit commit))) (file-name (git-file-name name version)) (sha256 (base32 - "1pqw7zbgxzwpig4xr0izc3z8h80c72i6bl5yi12br0d7aq6dbkvj")))) + "0awbd8x154c4dk4av7inpgd63n07xzng84vvc8qckmgljknc0j7k")))) (build-system gnu-build-system) (arguments `(#:modules ((guix build gnu-build-system) @@ -3125,6 +3125,7 @@ type, for example: packages, buffers, files, etc.") ("guix" ,guix))) (propagated-inputs `(("geiser" ,emacs-geiser) + ("geiser-guile" ,emacs-geiser-guile) ("guile-gcrypt" ,guile-gcrypt) ("dash" ,emacs-dash) ("bui" ,emacs-bui) -- 2.31.1
From: Morgan Smith <Morgan.J.Smith@outlook.com> * gnu/packages/emacs-xyz.scm (emacs-flycheck-guile)[propagated-inputs]: Add emacs-geiser-guile. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/packages/emacs-xyz.scm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 46716f9b5d..2a28e98bff 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -5111,7 +5111,8 @@ repetitions for example).") (base32 "0cs5r0ik6a3bl1k3imjl0r8y1i69kx9x9m9cgxj470qk34brwyj5")))) (propagated-inputs `(("emacs-flycheck" ,emacs-flycheck) - ("emacs-geiser" ,emacs-geiser))) + ("emacs-geiser" ,emacs-geiser) + ("emacs-geiser-guile" ,emacs-geiser-guile))) (build-system emacs-build-system) (home-page "https://github.com/flatwhatson/flycheck-guile") (synopsis "GNU Guile support for Flycheck") -- 2.31.1
From: Morgan Smith <Morgan.J.Smith@outlook.com> * gnu/packages/guile-xyz.scm (guile-studio)[inputs]: Add emacs-geiser-guile. Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at> --- gnu/packages/guile-xyz.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm index 089a9a3b55..42e3737d99 100644 --- a/gnu/packages/guile-xyz.scm +++ b/gnu/packages/guile-xyz.scm @@ -2742,6 +2742,7 @@ The picture values can directly be displayed in Geiser.") ("emacs-doom-modeline" ,emacs-doom-modeline) ("emacs-modus-themes" ,emacs-modus-themes) ("emacs-geiser" ,emacs-geiser) + ("emacs-geiser-guile" ,emacs-geiser-guile) ("emacs-company" ,emacs-company) ("emacs-ivy" ,emacs-ivy) ("emacs-flycheck" ,emacs-flycheck) -- 2.31.1
* gnu/packages/emacs-xyz.scm (geiser-gauche)[arguments]: Use #:include rather than #:phases to add geiser-gauche.scm. --- gnu/packages/emacs-xyz.scm | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 2a28e98bff..103d26e621 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -349,16 +349,7 @@ using geiser.") (base32 "0rxncnzx7qgcpvc8nz0sd8r0hwrplazzraahdwhbpq0q6z8ywqgg")))) (build-system emacs-build-system) (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'install 'install-scheme - (lambda* (#:key outputs #:allow-other-keys) - (install-file - "geiser-gauche.scm" - (string-append - (assoc-ref outputs "out") - "/share/emacs/site-lisp")) - #t))))) + `(#:include (cons "^geiser-gauche\\.scm$" %default-include))) (native-inputs `(("geiser" ,emacs-geiser))) (home-page "https://gitlab.com/emacs-geiser/gauche") -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-dvc)[#:configure-flags]: Use elpa-directory for lispdir. --- gnu/packages/emacs-xyz.scm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 103d26e621..ee3df7cf19 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -5243,9 +5243,15 @@ completion of relevant keywords.") (file-name (string-append name "-" version "-checkout")))) (build-system gnu-build-system) (arguments - `(#:configure-flags - (list (string-append "--with-lispdir=" (assoc-ref %outputs "out") - "/share/emacs/site-lisp/")) + `(#:modules ((guix build gnu-build-system) + ((guix build emacs-build-system) #:prefix emacs:) + (guix build utils)) + #:imported-modules (,@%gnu-build-system-modules + (guix build emacs-build-system) + (guix build emacs-utils)) + #:configure-flags + (list (string-append "--with-lispdir=" + (emacs:elpa-directory (assoc-ref %outputs "out")))) #:tests? #f ;no test suite #:phases (modify-phases %standard-phases -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-w3m)[#:configure-flags]: Use elpa-directory to determine lispdir. [#:phases]<install>: Likewise. --- gnu/packages/emacs-xyz.scm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index ee3df7cf19..949659e617 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -1721,14 +1721,16 @@ or unexpected behavior inside an elisp configuration file (typically ("imagemagick" ,imagemagick))) (arguments `(#:modules ((guix build gnu-build-system) + ((guix build emacs-build-system) #:prefix emacs:) (guix build utils) (guix build emacs-utils)) #:imported-modules (,@%gnu-build-system-modules + (guix build emacs-build-system) (guix build emacs-utils)) #:configure-flags (let ((out (assoc-ref %outputs "out"))) (list (string-append "--with-lispdir=" - out "/share/emacs/site-lisp") + (emacs:elpa-directory out)) (string-append "--with-icondir=" out "/share/images/emacs-w3m") ;; Leave .el files uncompressed, otherwise GC can't @@ -1773,8 +1775,7 @@ or unexpected behavior inside an elisp configuration file (typically (lambda* (#:key outputs #:allow-other-keys) (invoke "make" "install" "install-icons") (with-directory-excursion - (string-append (assoc-ref outputs "out") - "/share/emacs/site-lisp") + (emacs:elpa-directory (assoc-ref outputs "out")) (for-each delete-file '("ChangeLog" "ChangeLog.1")) (symlink "w3m-load.el" "w3m-autoloads.el") #t)))))) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-wget)[build-system]: Use emacs-build-system. [arguments]: Drop #:modules and #:imported-modules. Adjust #:phases accordingly. --- gnu/packages/emacs-xyz.scm | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 949659e617..90fe5b3a24 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -1795,35 +1795,18 @@ or unexpected behavior inside an elisp configuration file (typically version ".orig.tar.gz")) (sha256 (base32 "10byvyv9dk0ib55gfqm7bcpxmx2qbih1jd03gmihrppr2mn52nff")))) - (build-system gnu-build-system) + (build-system emacs-build-system) (inputs `(("wget" ,wget))) (native-inputs `(("emacs" ,emacs-minimal))) (arguments - `(#:modules ((guix build gnu-build-system) - (guix build utils) - (guix build emacs-utils)) - #:imported-modules (,@%gnu-build-system-modules - (guix build emacs-utils)) - #:tests? #f ; no check target + `(#:tests? #f ; no check target #:phases (modify-phases %standard-phases - (replace 'configure - (lambda* (#:key outputs #:allow-other-keys) - (substitute* "Makefile" - (("/usr/local") (assoc-ref outputs "out")) - (("/site-lisp/emacs-wget") "/site-lisp")) - #t)) - (add-before 'build 'patch-exec-paths + (add-after 'unpack 'patch-exec-paths (lambda* (#:key inputs outputs #:allow-other-keys) (let ((wget (assoc-ref inputs "wget"))) (emacs-substitute-variables "wget.el" ("wget-command" (string-append wget "/bin/wget")))) - #t)) - (add-after 'install 'post-install - (lambda* (#:key outputs #:allow-other-keys) - (emacs-generate-autoloads - "wget" (string-append (assoc-ref outputs "out") - "/share/emacs/site-lisp/")) #t))))) (home-page "https://www.emacswiki.org/emacs/EmacsWget") (synopsis "Simple file downloader for Emacs based on wget") -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-haskell-mode)[#:phases]<install>: Install to elpa-directory. --- gnu/packages/emacs-xyz.scm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 90fe5b3a24..13d55af0e3 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -1241,7 +1241,11 @@ replacement.") "/bin/emacs")) #:modules ((ice-9 match) (srfi srfi-26) + ((guix build emacs-build-system) #:prefix emacs:) ,@%gnu-build-system-modules) + #:imported-modules (,@%gnu-build-system-modules + (guix build emacs-build-system) + (guix build emacs-utils)) #:phases (modify-phases %standard-phases (delete 'configure) @@ -1282,7 +1286,7 @@ replacement.") (replace 'install (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) - (el-dir (string-append out "/share/emacs/site-lisp")) + (el-dir (emacs:elpa-directory out)) (doc (string-append out "/share/doc/haskell-mode-" ,version)) (info (string-append out "/share/info"))) -- 2.31.1
* gnu/packages/emacs-xyz.scm (emacs-julia-snail)[arguments]: Drop #:phases. Use #:include to add julia sources. --- gnu/packages/emacs-xyz.scm | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 13d55af0e3..41ab0f6f98 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -8891,14 +8891,7 @@ mode with the package emacs-julia-mode.") "065ix3jycsx3wvkq7a6060i93caxisdvgxgqb1l6rq15n4qln78y")))) (build-system emacs-build-system) (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'install 'JuliaSnail-jl - (lambda* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (install-file "JuliaSnail.jl" - (string-append out "/share/emacs/site-lisp/"))) - #t))))) + `(#:include (cons "^JuliaSnail\\.jl" %default-include))) (inputs `(("emacs-dash" ,emacs-dash) ("emacs-s" ,emacs-s) -- 2.31.1
Hi,
On Thu, Apr 08 2021, Leo Prikler wrote:
> Hi Guix,
>
> as you all recall, I recently put in some efforts into improving the
> Emacs user experience in Guix. There are three bugs addressed by this
> patch set:
>
> 1. Emacs libraries may inadvertently overwrite files in other libraries
> (solved by using ELPA-style subdirectories)
> 2. Emacs cannot find its own load-path after an update. (Solved with a
> wrapper).
> 3. Emacs can't find core programs, such as "ls" or "gzip".
I just wanted to let you know that I have been using these patches with
Emacs for a few days, and things have been working fine so far :) I
haven’t tested all the updated packages, though.
Out of curiosity, what are the differences between v2 and v1 of the
series? It would be nice to include a cover letter for v2 to give an
overview of the changes since v1.
Thanks for working on this!
Am Donnerstag, den 29.04.2021, 14:16 +0200 schrieb Xinglu Chen:
> Hi,
>
> On Thu, Apr 08 2021, Leo Prikler wrote:
>
> > Hi Guix,
> >
> > as you all recall, I recently put in some efforts into improving
> > the
> > Emacs user experience in Guix. There are three bugs addressed by
> > this
> > patch set:
> >
> > 1. Emacs libraries may inadvertently overwrite files in other
> > libraries
> > (solved by using ELPA-style subdirectories)
> > 2. Emacs cannot find its own load-path after an update. (Solved
> > with a
> > wrapper).
> > 3. Emacs can't find core programs, such as "ls" or "gzip".
>
> I just wanted to let you know that I have been using these patches
> with
> Emacs for a few days, and things have been working fine so far :) I
> haven’t tested all the updated packages, though.
>
> Out of curiosity, what are the differences between v2 and v1 of the
> series? It would be nice to include a cover letter for v2 to give an
> overview of the changes since v1.
The difference of v2 w.r.t. v1 lies in how Emacs finds core binaries
([03/33] in the respective series). v1 hardcodes them, but as I
feared, that won't work with tramp, so I changed it to adjusting PATH
in v2. You can test that this has a visible effect by checking some
variant of emacs-next both with v1 and v2.
Regards,
Leo
On Thu, Apr 29 2021, Leo Prikler wrote:
>> Out of curiosity, what are the differences between v2 and v1 of the
>> series? It would be nice to include a cover letter for v2 to give an
>> overview of the changes since v1.
> The difference of v2 w.r.t. v1 lies in how Emacs finds core binaries
> ([03/33] in the respective series). v1 hardcodes them, but as I
> feared, that won't work with tramp, so I changed it to adjusting PATH
> in v2. You can test that this has a visible effect by checking some
> variant of emacs-next both with v1 and v2.
Ok, thanks for explaining.
I've now pushed this patch set. Thanks, everyone who contributed packages. Thanks, everyone who submitted bugs. And thanks to Xinglu Chen for helping me test. I apologize in advance for all the bugs, that we didn't catch in the last fourteen days. Please yell at me as loud as you can if you find one. I wish you all enjoy a wonderful Labour Day. Leo
[-- Attachment #1: Type: text/plain, Size: 654 bytes --] Hi Leo, Thanks for your work on the emacs-build-system! In guix/build/emacs-build-system.scm, is the comment before %install-dir still consistent with your changes? It seems to describe the old system when all files were installed into site-lisp. --8<---------------cut here---------------start------------->8--- ;;; All the packages are installed directly under site-lisp, which means that ;;; having that directory in the EMACSLOADPATH is enough to have them found by ;;; Emacs. (define %install-dir "/share/emacs/site-lisp") --8<---------------cut here---------------end--------------->8--- Could you fix this? Thank you for your time! :-) Arun [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 524 bytes --]
Hi Arun,
Am Dienstag, den 04.05.2021, 10:43 +0530 schrieb Arun Isaac:
> In guix/build/emacs-build-system.scm, is the comment before %install-
> dir
> still consistent with your changes? It seems to describe the old
> system
> when all files were installed into site-lisp.
>
> --8<---------------cut here---------------start------------->8---
> ;;; All the packages are installed directly under site-lisp, which
> means that
> ;;; having that directory in the EMACSLOADPATH is enough to have them
> found by
> ;;; Emacs.
> (define %install-dir "/share/emacs/site-lisp")
> --8<---------------cut here---------------end--------------->8---
Thanks for pointing this out. How would
--8<---------------cut here---------------start------------->8---
;;; The location in which Emacs looks for packages. Emacs Lisp code,
that is
;;; installed there directly will be found when that directory is added
to
;;; EMACSLOADPATH. To avoid clashes between packages (particularly
considering
;;; auxiliary files), we install them one directory level below,
however.
;;; This indirection is handled by ‘expand-load-path’ during build and
a
;;; profile hook otherwise.
(define %install-dir "/share/emacs/site-lisp")
--8<---------------cut here---------------end--------------->8---
sound?
[-- Attachment #1: Type: text/plain, Size: 730 bytes --] Hi Leo, > --8<---------------cut here---------------start------------->8--- > The location in which Emacs looks for packages. Emacs Lisp code, that > is installed there directly will be found when that directory is added > to EMACSLOADPATH. To avoid clashes between packages (particularly > considering auxiliary files), we install them one directory level > below, however. This indirection is handled by ‘expand-load-path’ > during build and a profile hook otherwise. > --8<---------------cut here---------------end--------------->8--- Are there still packages that directly install into /share/emacs/site-lisp as mentioned in sentence 2? Apart from that one sentence, this looks good to me. Thanks! [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 524 bytes --]
Am Mittwoch, den 05.05.2021, 02:32 +0530 schrieb Arun Isaac:
> Hi Leo,
>
> > --8<---------------cut here---------------start------------->8---
> > The location in which Emacs looks for packages. Emacs Lisp code,
> > that
> > is installed there directly will be found when that directory is
> > added
> > to EMACSLOADPATH. To avoid clashes between packages (particularly
> > considering auxiliary files), we install them one directory level
> > below, however. This indirection is handled by ‘expand-load-path’
> > during build and a profile hook otherwise.
> > --8<---------------cut here---------------end--------------->8---
>
> Are there still packages that directly install into
> /share/emacs/site-lisp as mentioned in sentence 2? Apart from that
> one
> sentence, this looks good to me.
I haven't done an exhaustive check, so there might be some odd
packages, that don't fit into sentence 3. The profile hook counts as
"Emacs lisp code installed there directly" imo as well.
Regards,
Leo
[-- Attachment #1: Type: text/plain, Size: 62 bytes --] Ok, that makes sense. Do proceed with the fix. Thanks! Arun [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 524 bytes --]