diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm index bd0d2e026..269038744 100644 --- a/guix/build/emacs-build-system.scm +++ b/guix/build/emacs-build-system.scm @@ -183,6 +183,10 @@ store in '.el' files." "Check if NAME correspond to the name of an Emacs package." (string-prefix? "emacs-" name)) +(define (string-drop-emacs x) + "Drops `emacs-' from a string." + (string-drop x 6)) + (define (emacs-inputs inputs) "Retrieve the list of Emacs packages from INPUTS." (filter (match-lambda @@ -222,6 +226,38 @@ second hyphen. This corresponds to 'name-version' as used in ELPA packages." strip-store-file-name) store-dir)) +;; Copied from haskell-build-system.scm +(define (package-name-version store-dir) + "Given a store directory STORE-DIR return 'name-version' of the package." + (let* ((base (basename store-dir))) + (string-drop base (+ 1 (string-index base #\-))))) + +(define* (setup-environment #:key inputs outputs #:allow-other-keys) + "Export the variable EMACSLOADPATH, which are based on INPUTS and OUTPUTS, +respectively." + (let ((out (assoc-ref outputs "out"))) + ;; EMACSLOADPATH is where Emacs looks for the source code of the build's + ;; dependencies. + (set-path-environment-variable + "EMACSLOADPATH" + ;; XXX Matching "." hints that we could do + ;; something simpler here... + (list ".") + (cons (let ((store-item (cdr (assoc "emacs" (emacs-inputs inputs))))) + ;; TODO: Get a version from inputs + (string-append store-item "/share/emacs/25.3/lisp")) + (map + (lambda (foobar) + (let ((store-item (cdr foobar))) + (string-append store-item + %install-suffix "/" + (string-drop-emacs + (package-name-version store-item))))) + (alist-delete "emacs" + (alist-delete "source" + (emacs-inputs inputs)))))) + #t)) + (define %standard-phases (modify-phases gnu:%standard-phases (replace 'unpack unpack) @@ -229,6 +265,7 @@ second hyphen. This corresponds to 'name-version' as used in ELPA packages." (delete 'check) (delete 'install) (replace 'build build) + (add-before 'build 'setup-environment setup-environment) (add-before 'build 'install install) (add-after 'install 'make-autoloads make-autoloads) (add-after 'make-autoloads 'patch-el-files patch-el-files)