Subject: Re: bug#69290: declare-function doesn't work when combined with --eval and -batch

From: Konstantin Kharlamov <[email-masked]>
Date: Tue, 20 Feb 2024 22:56:01 +0300

On Tue, 2024-02-20 at 21:51 +0200, Eli Zaretskii wrote:
> > From: Konstantin Kharlamov <[email-masked]>
> > Date: Tue, 20 Feb 2024 21:59:31 +0300
> > 
> > Stumbled upon that while trying to improve CI in Evil mode.
> > Enabling byte-compilation
> > causes warnings about `undo-redo` undeclared on older Emacs'es, so
> > tried to work
> > around that with `declare-function`. Turns out it doesn't work.
> 
> Of course it does.  If used correctly, that is.  We do that in
> gazillion places in our sources.
> 
> >     λ cat test.el
> >     ;;; -*- lexical-binding: t -*-
> >     (hello)
> >     λ emacs -batch --eval '(declare-function hello nil)' -f batch-
> > byte-compile test.el
> > 
> >     In end of data:
> >     test.el:2:2: Warning: the function ‘hello’ is not known to be
> > defined.
> > 
> > ## Expected
> > 
> > There's no warning
> 
> What does the doc string of declare-function tell you about its usage
> and effect?

It says `Tell the byte-compiler that function FN is defined, in FILE`,
and then FILE may be nil. In the context of the problem it seems the
only thing that's relevant. There's a lot more text, but the rest of it
just explains behavior of different parameters. Is there anything I'm
missing?