Subject: bug#51139: 29.0.50; MH-E and edmacro byte-compile warnings in nox builds

From: "Basil L. Contovounesios" <[email-masked]>
Date: Mon, 11 Oct 2021 22:49:24 +0100

Basil L. Contovounesios [2021-10-11 22:17 +0100] wrote:

> I assume the warnings are not important enough to install anything on
> emacs-28, so I attach a patch against master for both sets of warnings.
> WDYT?

Heh, no sooner had I submitted the patch than it already had conflicts
against master after the following change:

Remove redundant calls to 'mh-do-in-gnu-emacs'
76d75df8e7 2021-10-11 22:57:43 +0200
https://git.sv.gnu.org/cgit/emacs.git/commit/?id=76d75df8e7

So I've respun it in the attached.

-- 
Basil

>From bad4d4ac2abf48ef3c31ba9172c703d1117350cd Mon Sep 17 00:00:00 2001
From: "Basil L. Contovounesios" <[email-masked]>
Date: Mon, 11 Oct 2021 19:14:23 +0100
Subject: [PATCH] Fix byte-compilation warnings in nox builds

For discussion, see bug#51139.

* lisp/edmacro.el (edmacro-fix-menu-commands): Load mwheel to pacify
free variable warnings in without-x builds.

* lisp/mh-e/mh-compat.el: Declare image.el functions that are not
preloaded in without-x builds.
* lisp/mh-e/mh-utils.el (mh--with-image-load-path): New macro.
(mh-logo-display):
* lisp/mh-e/mh-tool-bar.el (mh-tool-bar-folder-buttons-init)
(mh-tool-bar-letter-buttons-init): Use it to pacify byte-compilation
warnings about image.el definitions not preloaded without-x.
---
 lisp/edmacro.el          |  6 ++++++
 lisp/mh-e/mh-compat.el   |  4 ++++
 lisp/mh-e/mh-tool-bar.el | 12 ++----------
 lisp/mh-e/mh-utils.el    | 24 ++++++++++++++++++------
 4 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/lisp/edmacro.el b/lisp/edmacro.el
index e90b3a006e..a4eb574a4c 100644
--- a/lisp/edmacro.el
+++ b/lisp/edmacro.el
@@ -604,6 +604,12 @@ edmacro-sanitize-for-string
 (defun edmacro-fix-menu-commands (macro &optional noerror)
   (if (vectorp macro)
       (let (result)
+        ;; Not preloaded in without-x builds.
+        (require 'mwheel)
+        (defvar mouse-wheel-down-event)
+        (defvar mouse-wheel-left-event)
+        (defvar mouse-wheel-right-event)
+        (defvar mouse-wheel-up-event)
 	;; Make a list of the elements.
 	(setq macro (append macro nil))
 	(dolist (ev macro)
diff --git a/lisp/mh-e/mh-compat.el b/lisp/mh-e/mh-compat.el
index 839379857f..561e2ec7c8 100644
--- a/lisp/mh-e/mh-compat.el
+++ b/lisp/mh-e/mh-compat.el
@@ -87,9 +87,13 @@ 'mh-face-background
 (define-obsolete-function-alias 'mh-font-lock-add-keywords
   #'font-lock-add-keywords "29.1")
 
+;; Not preloaded in without-x builds.
+(declare-function image-load-path-for-library "image")
 (define-obsolete-function-alias 'mh-image-load-path-for-library
   #'image-load-path-for-library "29.1")
 
+;; Not preloaded in without-x builds.
+(declare-function image-search-load-path "image")
 (define-obsolete-function-alias 'mh-image-search-load-path
   #'image-search-load-path "29.1")
 
diff --git a/lisp/mh-e/mh-tool-bar.el b/lisp/mh-e/mh-tool-bar.el
index 06b94b6bf8..88e5c0e7bb 100644
--- a/lisp/mh-e/mh-tool-bar.el
+++ b/lisp/mh-e/mh-tool-bar.el
@@ -213,11 +213,7 @@ mh-tool-bar-define
        ;; Tool bar initialization functions
        (defun mh-tool-bar-folder-buttons-init ()
          (when (mh-buffer-exists-p 'mh-folder-mode)
-           (let* ((load-path (image-load-path-for-library "mh-e"
-                                                          "mh-logo.xpm"))
-                  (image-load-path (cons (car load-path)
-                                         (when (boundp 'image-load-path)
-                                           image-load-path))))
+           (mh--with-image-load-path
              (setq mh-folder-tool-bar-map
                    (let ((tool-bar-map (make-sparse-keymap)))
                      ,@(nreverse folder-button-setter)
@@ -236,11 +232,7 @@ mh-tool-bar-define
                      tool-bar-map)))))
        (defun mh-tool-bar-letter-buttons-init ()
          (when (mh-buffer-exists-p 'mh-letter-mode)
-           (let* ((load-path (image-load-path-for-library "mh-e"
-                                                          "mh-logo.xpm"))
-                  (image-load-path (cons (car load-path)
-                                         (when (boundp 'image-load-path)
-                                           image-load-path))))
+           (mh--with-image-load-path
              (setq mh-letter-tool-bar-map
                    (let ((tool-bar-map (make-sparse-keymap)))
                      ,@(nreverse letter-button-setter)
diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el
index 4f211c1286..3f1bcbdcc0 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -119,22 +119,34 @@ mh-replace-string
 
 ;;; Logo Display
 
+;;;###mh-autoload
+(defmacro mh--with-image-load-path (&rest body)
+  "Load `image' and eval BODY with `image-load-path' set appropriately."
+  (declare (debug t) (indent 0))
+  `(progn
+     ;; Not preloaded in without-x builds.
+     (require 'image)
+     (defvar image-load-path)
+     (declare-function image-load-path-for-library "image")
+     (let* ((load-path (image-load-path-for-library "mh-e" "mh-logo.xpm"))
+            (image-load-path (cons (car load-path)
+                                   (and (boundp 'image-load-path)
+                                        image-load-path))))
+       ,@body)))
+
 (defvar mh-logo-cache nil)
 
 ;;;###mh-autoload
 (defun mh-logo-display ()
   "Modify mode line to display MH-E logo."
-  (let* ((load-path (image-load-path-for-library "mh-e" "mh-logo.xpm"))
-         (image-load-path (cons (car load-path)
-                                (when (boundp 'image-load-path)
-                                  image-load-path))))
+  (mh--with-image-load-path
     (add-text-properties
      0 2
      `(display ,(or mh-logo-cache
                     (setq mh-logo-cache
                           (mh-funcall-if-exists
-                           find-image '((:type xpm :ascent center
-                                               :file "mh-logo.xpm"))))))
+                           find-image '(( :type xpm :ascent center
+                                          :file "mh-logo.xpm" ))))))
      (car mode-line-buffer-identification))))
 
 
-- 
2.33.0