From 141e7e8c45c39fbe2e6cfa879f1dc7b7f721bbfc Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Sat, 23 Nov 2019 12:04:50 +0900 Subject: [PATCH 1/6] build: emacs-build-system: Unify the installation directory. This change aims to reduce the length of the EMACSLOADPATH environment variable, which was found to cause issues such as bug \#38309 (https://bugs.gnu.org/38309). It should also enable discovery of newly installed packages without refreshing the session's EMACSLOADPATH of the user profile (e.g., when launching Emacs from the desktop manager application launcher), as discussed in bug \#38309 (https://bugs.gnu.org/38309). * guix/build/emacs-build-system.scm (%legacy-install-suffix): Rename to... (%install-dir): ...this. (%install-suffix): Remove variable. (build): Adjust installation target directory. (patch-el-files): Likewise. (install): Likewise. (move-doc): Likewise. (make-autoloads): Likewise. --- guix/build/emacs-build-system.scm | 39 +++++++++++++------------------ 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm index f0c41812f1..e2b792d3dc 100644 --- a/guix/build/emacs-build-system.scm +++ b/guix/build/emacs-build-system.scm @@ -40,11 +40,10 @@ ;; ;; Code: -;; Directory suffix where we install ELPA packages. We avoid ".../elpa" as -;; Emacs expects to find the ELPA repository 'archive-contents' file and the -;; archive signature. -(define %legacy-install-suffix "/share/emacs/site-lisp") -(define %install-suffix (string-append %legacy-install-suffix "/guix.d")) +;;; 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") ;; These are the default inclusion/exclusion regexps for the install phase. (define %default-include '("^[^/]*\\.el$" "^[^/]*\\.info$" "^doc/.*\\.info$")) @@ -87,11 +86,10 @@ environment variable\n" source-directory))) "Compile .el files." (let* ((emacs (string-append (assoc-ref inputs "emacs") "/bin/emacs")) (out (assoc-ref outputs "out")) - (elpa-name-ver (store-directory->elpa-name-version out)) - (el-dir (string-append out %install-suffix "/" elpa-name-ver))) + (site-lisp (string-append out %install-dir))) (setenv "SHELL" "sh") (parameterize ((%emacs emacs)) - (emacs-byte-compile-directory el-dir)))) + (emacs-byte-compile-directory site-lisp)))) (define* (patch-el-files #:key outputs #:allow-other-keys) "Substitute the absolute \"/bin/\" directory with the right location in the @@ -108,9 +106,7 @@ store in '.el' files." #:binary #t)) (let* ((out (assoc-ref outputs "out")) - (elpa-name-ver (store-directory->elpa-name-version out)) - (el-dir (string-append out %install-suffix "/" elpa-name-ver)) - + (site-lisp (string-append out %install-dir)) ;; (ice-9 regex) uses libc's regexp routines, which cannot deal with ;; strings containing NULs. Filter out such files. TODO: Remove ;; this workaround when is fixed. @@ -124,7 +120,7 @@ store in '.el' files." (error "patch-el-files: unable to locate " cmd-name)) (string-append "\"" cmd "\""))))) - (with-directory-excursion el-dir + (with-directory-excursion site-lisp ;; Some old '.el' files (e.g., tex-buf.el in AUCTeX) are still ;; ISO-8859-1-encoded. (unless (false-if-exception (substitute-program-names)) @@ -175,15 +171,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")) - (elpa-name-ver (store-directory->elpa-name-version out)) - (target-directory (string-append out %install-suffix "/" elpa-name-ver)) + (site-lisp (string-append out %install-dir)) (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 target-directory stripped-file))) + (target-file (string-append site-lisp stripped-file))) (format #t "`~a' -> `~a'~%" file target-file) (install-file file (dirname target-file)))) files-to-install) @@ -197,14 +192,12 @@ parallel. PARALLEL-TESTS? is ignored when using a non-make TEST-COMMAND." (define* (move-doc #:key outputs #:allow-other-keys) "Move info files from the ELPA package directory to the info directory." (let* ((out (assoc-ref outputs "out")) - (elpa-name-ver (store-directory->elpa-name-version out)) - (el-dir (string-append out %install-suffix "/" elpa-name-ver)) - (name-ver (strip-store-file-name out)) + (site-lisp (string-append out %install-dir)) (info-dir (string-append out "/share/info/")) - (info-files (find-files el-dir "\\.info$"))) + (info-files (find-files site-lisp "\\.info$"))) (unless (null? info-files) (mkdir-p info-dir) - (with-directory-excursion el-dir + (with-directory-excursion site-lisp (when (file-exists? "dir") (delete-file "dir")) (for-each (lambda (f) (copy-file f (string-append info-dir "/" (basename f))) @@ -216,11 +209,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)) - (el-dir (string-append out %install-suffix "/" elpa-name-ver))) + (elpa-name (package-name->name+version elpa-name-ver))) (parameterize ((%emacs emacs)) - (emacs-generate-autoloads elpa-name el-dir)))) + (emacs-generate-autoloads elpa-name site-lisp)))) (define (emacs-package? name) "Check if NAME correspond to the name of an Emacs package." -- 2.24.0