Subject: [PATCH emacs-team 06/45] gnu: emacs-helpful: Fix build.

From: Liliana Marie Prikler <[email-masked]>
Date: Sun, 2 Mar 2025 13:20:28 +0100

* gnu/packages/patches/emacs-helpful-fix-tests.patch: Squash a test fix for
Emacs 30.
* gnu/packages/patches/emacs-helpful-fix-signature.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it here.
* gnu/packages/emacs-xyz.scm (emacs-helpful)[patches]: Use it here.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/emacs-xyz.scm                    |  4 ++-
 .../patches/emacs-helpful-fix-signature.patch | 34 +++++++++++++++++++
 .../patches/emacs-helpful-fix-tests.patch     | 20 ++++++-----
 4 files changed, 49 insertions(+), 10 deletions(-)
 create mode 100644 gnu/packages/patches/emacs-helpful-fix-signature.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 97e26b8468a..3b1c784ddc0 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1219,6 +1219,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/emacs-eglot-x-fix-apply-text-edits.patch			\
   %D%/packages/patches/emacs-exec-path.patch			\
   %D%/packages/patches/emacs-fix-scheme-indent-function.patch	\
+  %D%/packages/patches/emacs-helpful-fix-signature.patch	\
   %D%/packages/patches/emacs-helpful-fix-tests.patch	\
   %D%/packages/patches/emacs-highlight-stages-add-gexp.patch	\
   %D%/packages/patches/emacs-json-reformat-fix-tests.patch	\
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 1feab918362..80abd3f1ccf 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -27437,7 +27437,9 @@ (define-public emacs-helpful
        (file-name (git-file-name name version))
        (sha256
         (base32 "03afgdbs5nmhw833svrqky7fmfs1zlvqzcj7j5g29sakivs60xqc"))
-       (patches (search-patches "emacs-helpful-fix-tests.patch"))))
+       (patches (search-patches
+                 "emacs-helpful-fix-signature.patch"
+                 "emacs-helpful-fix-tests.patch"))))
     (build-system emacs-build-system)
     (propagated-inputs
      (list emacs-dash emacs-elisp-refs emacs-f emacs-s))
diff --git a/gnu/packages/patches/emacs-helpful-fix-signature.patch b/gnu/packages/patches/emacs-helpful-fix-signature.patch
new file mode 100644
index 00000000000..867df443cbe
--- /dev/null
+++ b/gnu/packages/patches/emacs-helpful-fix-signature.patch
@@ -0,0 +1,34 @@
+From 3794389ef685b6a59b3a487d0492c3add3c42c2f Mon Sep 17 00:00:00 2001
+From: Xiyue Deng <[email-masked]>
+Date: Wed, 26 Feb 2025 15:39:42 -0800
+Subject: [PATCH] Check for interpreted-function-p
+
+Emacs 30.x added interpreted-function which is different from
+byte-code-function, and hence helpful--signature will try to treat it
+like a lambda which will fail with
+
+,----
+| (wrong-type-argument listp #[(x) (x) (t) nil "Foo"])
+`----
+
+This patch adds tests for such case using interpreted-function-p when
+it's available.
+---
+ helpful.el | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/helpful.el b/helpful.el
+index b100816..331ece8 100644
+--- a/helpful.el
++++ b/helpful.el
+@@ -2570,7 +2570,9 @@ For example, \"(some-func FOO &optional BAR)\"."
+             (cond
+              ((symbolp sym)
+               (help-function-arglist sym))
+-             ((byte-code-function-p sym)
++             ((or (byte-code-function-p sym)
++                  (if (fboundp 'interpreted-function-p)
++                      (interpreted-function-p sym)))
+               ;; argdesc can be a list of arguments or an integer
+               ;; encoding the min/max number of arguments. See
+               ;; Byte-Code Function Objects in the elisp manual.
\ No newline at end of file
diff --git a/gnu/packages/patches/emacs-helpful-fix-tests.patch b/gnu/packages/patches/emacs-helpful-fix-tests.patch
index 61ed0671a47..f788a7dee64 100644
--- a/gnu/packages/patches/emacs-helpful-fix-tests.patch
+++ b/gnu/packages/patches/emacs-helpful-fix-tests.patch
@@ -1,16 +1,18 @@
-From 233e254bbe44f70ca899a506b3706af489228fda Mon Sep 17 00:00:00 2001
-From: aagon <[email-masked]>
-Date: Thu, 10 Aug 2023 20:03:52 +0200
-Subject: [PATCH] Repair helpful--display-implementations test for emacs 29.1
-
----
- test/helpful-unit-test.el | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
 diff --git a/test/helpful-unit-test.el b/test/helpful-unit-test.el
 index 0f5177b..0716b0d 100644
 --- a/test/helpful-unit-test.el
 +++ b/test/helpful-unit-test.el
+@@ -734,7 +734,9 @@ associated a lambda with a keybinding."
+   (should
+    (equal
+     (length (helpful--keymaps-containing #'helpful--dummy-command))
+-    2))
++    (if (< emacs-major-version 30)
++        2
++      3)))
+ 
+   ;; Undo keybinding.
+   (global-set-key (kbd "C-c M-S-c") nil)
 @@ -1089,8 +1089,12 @@ find the source code."
    (require 'xref)
    (helpful-function 'xref-location-marker)
-- 
2.48.1