On 18/12/2022 21:26, Ihor Radchenko wrote:
Max Nikulin writes:
We might do something like
(eval-and-compile (org-assert-version))
This will give obscure error during compiling since `org-assert-version'
is not defined.
Yes, but we will at least abort the compilation this way.
You are right that it prevents creation of .elc files. Unfortunately
`byte-recompile-directory' converts failure into a message instead of
aborting package install completely.
When used consistently, it should cause load of Org completely
uncompiled during next Emacs session. It is better than having
incorrectly compiled files.
Notice that `org-assert-version' works for compiled files only, so if a
user loads some third-party package (hyperbole?) that loads built-in Org
and later adds new Org to `load-path' then we get an obscure error again.
Currently I am experimenting with minimal examples, not with full Org
package, so I may confuse something.
;; Remove when support of Emacs-29 is dropped.
(unless (fboundp 'org-assert-version)
(error "Org is compiled or loaded while older version loaded already.
Please, ensure that no other org versions are loaded and recompile."))
Another idea to have more concise code in each file is to put a new
macro to a *new* file to avoid the issue with old org-macs.el without
definition of the new macro `org-assert-version'. So each file should
contain
(require 'org-assert-version-undefined)
(org-assert-version-undefined)
`org-assert-version' remains in org-macs.el. The goal is to generate an
instructive error. The problem is that after fix in
org-assert-version-undefined.el, an old version will be active for some
users.
In addition I have noticed that e.g. org-matlab.el contains
(require 'org-macs)
(org-assert-version)
Shouldn't it be (eval-when-compile (require 'org-macs)) since no
functions are used from this file? Some files have duplicated (require
'org-macs).