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:17:19 +0100

Severity: minor
Tags: patch

I see the following byte-compilation warnings in --without-x builds:

--8<---------------cut here---------------start------------->8---
In edmacro-fix-menu-commands:
edmacro.el:622:34: Warning: reference to free variable
    ‘mouse-wheel-down-event’
edmacro.el:622:57: Warning: reference to free variable ‘mouse-wheel-up-event’
edmacro.el:623:34: Warning: reference to free variable
    ‘mouse-wheel-right-event’
edmacro.el:624:34: Warning: reference to free variable
    ‘mouse-wheel-left-event’

In end of data:
mh-e/mh-compat.el:96:5: Warning: the function ‘image-search-load-path’ is not
    known to be defined.
mh-e/mh-compat.el:93:5: Warning: the function ‘image-load-path-for-library’ is
    not known to be defined.
In mh-logo-display:
mh-e/mh-utils.el:129:40: Warning: Unused lexical variable `image-load-path'
In mh-tool-bar-folder-buttons-init:
mh-e/mh-tool-bar.el:302:1: Warning: Unused lexical variable `image-load-path'
In mh-tool-bar-letter-buttons-init:
mh-e/mh-tool-bar.el:384:3: Warning: Unused lexical variable `image-load-path'
In end of data:
mh-e/mh-utils.el:128:24: Warning: the function ‘image-load-path-for-library’
    is not known to be defined.
In end of data:
mh-e/mh-tool-bar.el:302:1: Warning: the function ‘image-load-path-for-library’
    is not known to be defined.
--8<---------------cut here---------------end--------------->8---

The MH-E warnings are seen on master, whereas the edmacro ones are also
on emacs-28 (details of both configurations follow my signature).

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?

Thanks,

-- 
Basil

>From 3b5b2a942f14d6512a848cf6cafa4d8a7d5610de 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

* lisp/edmacro.el (edmacro-fix-menu-commands): Load mwheel to pacify
undefined 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    | 37 ++++++++++++++++++++++++-------------
 4 files changed, 36 insertions(+), 23 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 659c4354b1..37a12de075 100644
--- a/lisp/mh-e/mh-compat.el
+++ b/lisp/mh-e/mh-compat.el
@@ -89,9 +89,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 805408cfc7..d199cdb872 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 93bc7f8d39..b64e6e49c1 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -119,24 +119,35 @@ 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))
+  `(mh-do-in-gnu-emacs
+     ;; 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."
-  (mh-do-in-gnu-emacs
-    (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))))
-      (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"))))))
-       (car mode-line-buffer-identification)))))
+  (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" ))))))
+     (car mode-line-buffer-identification))))
 
 
 
-- 
2.33.0

In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu)
 of 2021-10-11 built on tia
Repository revision: 2810fe6bfca182e4376d818b5510507d5ff7e1b5
Repository branch: master
System Description: Debian GNU/Linux bookworm/sid

Configured using:
 'configure 'CC=ccache gcc' 'CFLAGS=-O2 -march=native' --config-cache
 --prefix=/home/blc/.local --program-suffix=-nox
 --enable-checking=structs --with-file-notification=yes
 --with-x-toolkit=no --without-x'

Configured features:
ACL DBUS GMP GNUTLS GPM JSON LCMS2 LIBSELINUX LIBSYSTEMD LIBXML2 MODULES
NOTIFY INOTIFY PDUMPER SECCOMP SOUND THREADS XIM ZLIB

Important settings:
  value of $LANG: en_IE.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util rmail
tool-bar rmail-loaddefs auth-source cl-seq eieio eieio-core cl-macs
eieio-loaddefs password-cache json map text-property-search time-date
seq mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils term/xterm xterm gv subr-x
byte-opt bytecomp byte-compile cconv regexp-opt iso-transl tooltip eldoc
paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select mouse
jit-lock font-lock syntax font-core term/tty-colors frame minibuffer
cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai
tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian
slovak czech european ethiopic indian cyrillic chinese composite
emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help
simple abbrev obarray cl-preloaded nadvice button loaddefs faces
cus-face macroexp files window text-properties overlay sha1 md5 base64
format env code-pages mule custom widget hashtable-print-readable
backquote threads dbusbind inotify lcms2 multi-tty make-network-process
emacs)

In GNU Emacs 28.0.60 (build 1, x86_64-pc-linux-gnu)
 of 2021-10-11 built on tia
Repository revision: b3d0f53b296a0876ec7a55ae840868e65ed54e14
Repository branch: emacs-28
System Description: Debian GNU/Linux bookworm/sid

Configured using:
 'configure 'CC=ccache gcc' 'CFLAGS=-O2 -march=native' --config-cache
 --prefix=/home/blc/.local --program-suffix=-28-nox
 --enable-checking=structs --with-file-notification=yes
 --with-x-toolkit=no --without-x'

Configured features:
ACL DBUS GMP GNUTLS GPM JSON LCMS2 LIBSELINUX LIBSYSTEMD LIBXML2 MODULES
NOTIFY INOTIFY PDUMPER SECCOMP SOUND THREADS XIM ZLIB

Important settings:
  value of $LANG: en_IE.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util rmail
tool-bar rmail-loaddefs auth-source cl-seq eieio eieio-core cl-macs
eieio-loaddefs password-cache json map text-property-search time-date
subr-x seq mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev
gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils term/xterm xterm byte-opt gv
bytecomp byte-compile cconv regexp-opt iso-transl tooltip eldoc paren
electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select mouse
jit-lock font-lock syntax font-core term/tty-colors frame minibuffer
cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai
tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian
slovak czech european ethiopic indian cyrillic chinese composite
emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help
simple abbrev obarray cl-preloaded nadvice button loaddefs faces
cus-face macroexp files window text-properties overlay sha1 md5 base64
format env code-pages mule custom widget hashtable-print-readable
backquote threads dbusbind inotify lcms2 multi-tty make-network-process
emacs)