Subject: [bug#72406] [PATCH emacs-team WIP v4 04/24] build-system: emacs: Handle variants in elpa naming.

From: Liliana Marie Prikler <[email-masked]>
Date: Sun, 11 Aug 2024 14:58:44 +0200

* guix/build/emacs-build-system.scm (%emacs-prefix): New variable.
(package-name-version->elpa-name-version): Infer the prefix to strip from the
emacs used to compile the package.
---
 guix/build/emacs-build-system.scm | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm
index aa083c6409..1894ac4c23 100644
--- a/guix/build/emacs-build-system.scm
+++ b/guix/build/emacs-build-system.scm
@@ -316,16 +316,29 @@ (define* (validate-compiled-autoloads #:key outputs #:allow-other-keys)
          (autoloads (find-files out "-autoloads.elc$")))
     (emacs-batch-eval (format #f "(mapc #'load '~s)" autoloads))))
 
-(define (emacs-package? name)
-  "Check if NAME correspond to the name of an Emacs package."
-  (string-prefix? "emacs-" name))
+(define %emacs-prefix
+  (make-parameter #f))
 
 (define (package-name-version->elpa-name-version name-ver)
   "Convert the Guix package NAME-VER to the corresponding ELPA name-version
 format.  Essentially drop the prefix used in Guix."
-  (if (emacs-package? name-ver)  ; checks for "emacs-" prefix
-      (string-drop name-ver (string-length "emacs-"))
-      name-ver))
+  ;; Get the preferred emacs prefix
+  (or (%emacs-prefix)
+      (%emacs-prefix
+       (let ((emacs (if (string-prefix? "/" (%emacs)) ; absolute file name
+                        (%emacs)
+                        (which "emacs"))))
+         (string-append
+          (package-name->name+version
+           (strip-store-file-name (dirname (dirname emacs))))
+          "-"))))
+
+  (cond
+   ((string-prefix? (%emacs-prefix) name-ver)
+    (string-drop name-ver (string-length (%emacs-prefix))))
+   ((string-prefix? "emacs-" name-ver)
+    (string-drop name-ver (string-length "emacs-")))
+   (else name-ver)))
 
 (define (store-directory->elpa-name-version store-dir)
   "Given a store directory STORE-DIR return the part of the basename after the
-- 
2.45.2