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 <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 <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. Signed-off-by: Clément Lassieur <clement@lassieur.org>
This commit is contained in:
parent
fabd4900d8
commit
65a7dd2950
@ -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 <https://bugs.gnu.org/30116> 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."
|
||||
|
Loading…
Reference in New Issue
Block a user