Subject: Re: bug#39823: 26.3; update-directory-autoloads regression from Emacs 26 to Emacs 27

From: Maxim Cournoyer <[email-masked]>
Date: Fri, 13 Mar 2020 22:06:26 -0400

Hello again,

Eli Zaretskii <[email-masked]> writes:

>> From: Noam Postavsky <[email-masked]>
>> Date: Thu, 12 Mar 2020 20:43:09 -0400
>> Cc: , [email-masked]
>> 
>> > Works on Emacs 26.3, but fails on Emacs 27.0.50, with the error message:
>> >
>> > Wrong type argument: stringp, nil
>> 
>> The difference is that --eval now evaluates with lexical-binding
>> enabled, so the let-binding of generated-autoload-file is lexical unless
>> autoload.el, with its (defvar generated-autoload-file nil ...), has been
>> loaded.
>> [...]
>> See also https://lists.gnu.org/r/emacs-devel/2020-03/msg00173.html for
>> (much) more discussion on this.
>
> The "wrap with eval" trick suggested by Stefan in the latter
> discussion does work here:
>
>  emacs --quick --batch --eval "(eval '(progn
>    (let ((backup-inhibited t)
>          (generated-autoload-file \"/tmp/toto\"))
>      (update-directory-autoloads \"/tmp\"))))"

Oh, that's an interesting trick.  I had not realized `eval' could be
switched to either lexical or dynamic (the default).

Thanks!

Maxim