Subject: bug#31148: 26.1; require w32 errors

From: Alex Branham <[email-masked]>
Date: Fri, 13 Apr 2018 12:45:37 -0500

On Fri 13 Apr 2018 at 12:22, Eli Zaretskii <[email-masked]> wrote:

>> From: Alex Branham <[email-masked]>
>> Cc: [email-masked]
>> Date: Fri, 13 Apr 2018 10:15:59 -0500
>>
>> >> (require 'w32-fns nil t)
>> >>
>> >> It produces an error void-function set-message-beep. This is reproducible for me from emacs -q.
>> >
>> > Don't do that, then, unless you are in a w32 Emacs.
>>
>> What's the recommended way for packages to rely on these functions then?
>> It seems annoying to wrap every call to w32-functions in
>> (if (fboundp ...) (w32-...))
>
> I don't understand the question.  w32-fns.el is preloaded on
> MS-Windows, so packages that rely on some function from there can
> simply call them.
>
> IOW, why would you want to 'require' w32-fns?

I'm going through and editing some older ESS code, and they make checks
like this:

(if (not (w32-shell-dos-semantics))
      (add-hook 'comint-output-filter-functions 'ess-bugs-exit-notify-sh))

Which causes errors on non-windows machines unless you wrap the call to
w32-shell-dos-semantics in (and (fboundp ...)), which looks weird to me:

(if (not (and
           (fboundp 'w32-shell-dos-semantics)
           (w32-shell-dos-semantics)))
      (add-hook 'comint-output-filter-functions 'ess-bugs-exit-notify-sh))

They also have code like:

(if (ess-microsoft-p)
  (w32-short-file-name ...))

which causes byte compiler warnings about w32 being undefined. I guess
the best/only way to get rid of these is to (declare-function ... ),
right?

Thanks,
Alex