Subject: Emacs packages that override built-in features ignored when compiled

From: Jelle Licht <[email-masked]>
Date: Sun, 19 May 2024 15:00:44 +0200

Hi all,

What I think happens is that Emacs code that is compiled against an
(Emacs) feature that is available as both a built-in and provided
(propagated) input seems to 'compile' Emacs code against the built-in
version.

Case in point:
Built-in jsonrpc feature for Emacs 29.3 has the following slot:
	-events-buffer-scrollback-size	t	'eieio--unbound

The version of jsonrpc as packaged in emacs-jsonrpc (and also propagated by
our emacs-eglot package):
	-events-buffer-config	t	'(:size nil :format full)

Reproducer:

Run:

guix shell --container --preserve=TERM emacs emacs-eglot -- emacs -nw -Q,
`M-x describe-symbol` -> jsonrpc-connection -> notice that the help
buffer lists the details from the built-in jsonrpc class, while the link
to "jsonrpc.el" at the top of the *Help* buffer links (correctly) to the
more recent version (as propagated by emacs-eglot), which makes me think
it's not a load-path issue.

AFAICT this means that we will run into issues once a library
(e.g. emacs-eglot) starts depending on slots present in the (propagated)
emacs-jsonrpc, but not the built-in jsonrpc version.

Thanks,
 - Jelle