summary refs log tree commit diff
path: root/pkgs/build-support/emacs/setup-hook.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/build-support/emacs/setup-hook.sh')
-rw-r--r--pkgs/build-support/emacs/setup-hook.sh30
1 files changed, 21 insertions, 9 deletions
diff --git a/pkgs/build-support/emacs/setup-hook.sh b/pkgs/build-support/emacs/setup-hook.sh
index b210511d670..8f074e0b406 100644
--- a/pkgs/build-support/emacs/setup-hook.sh
+++ b/pkgs/build-support/emacs/setup-hook.sh
@@ -1,13 +1,25 @@
 addEmacsVars () {
-  if test -d $1/share/emacs/site-lisp; then
-      # it turns out, that the trailing : is actually required
+  for lispDir in \
+      "$1/share/emacs/site-lisp" \
+      "$1/share/emacs/site-lisp/"* \
+      "$1/share/emacs/site-lisp/elpa/"*; do
+    # Add the path to the Emacs load path if it is a directory
+    # containing .el files and it has not already been added to the
+    # load path.
+    if [[ -d $lispDir && "$(echo "$lispDir"/*.el)" && ${EMACSLOADPATH-} != *"$lispDir":* ]] ; then
+      # It turns out, that the trailing : is actually required
       # see https://www.gnu.org/software/emacs/manual/html_node/elisp/Library-Search.html
-      export EMACSLOADPATH="$1/share/emacs/site-lisp:${EMACSLOADPATH-}"
-  fi
+      export EMACSLOADPATH="$lispDir:${EMACSLOADPATH-}"
+    fi
+  done
 }
 
-# If this is for a wrapper derivation, emacs and the dependencies are all
-# run-time dependencies. If this is for precompiling packages into bytecode,
-# emacs is a compile-time dependency of the package.
-addEnvHooks "$hostOffset" addEmacsVars
-addEnvHooks "$targetOffset" addEmacsVars
+if [[ ! -v emacsHookDone ]]; then
+  emacsHookDone=1
+
+  # If this is for a wrapper derivation, emacs and the dependencies are all
+  # run-time dependencies. If this is for precompiling packages into bytecode,
+  # emacs is a compile-time dependency of the package.
+  addEnvHooks "$hostOffset" addEmacsVars
+  addEnvHooks "$targetOffset" addEmacsVars
+fi