Nicolas Goaziou <[email protected]> writes:
Hello, Nicolas.
> Do you mean `defstruct'? If so, it has been in cl.el for ages. I doubt
> this is related to the incompatibility you are experiencing.
Yes, that's `defstruct'. Its ABI changed between 24.5 and 25.0, The
older one had this in the end:
(push `(setq ,tag-symbol (list ',tag)) forms)
(push `(cl-eval-when (compile load eval)
(put ',name 'cl-struct-slots ',descs)
(put ',name 'cl-struct-type ',(list type (eq named t)))
(put ',name 'cl-struct-include ',include)
(put ',name 'cl-struct-print ,print-auto)
,@(mapcar (lambda (x)
`(put ',(car x) 'side-effect-free ',(cdr x)))
side-eff))
forms)
`(progn ,@(nreverse (cons `',name forms)))))
And the younger one looks like this:
`(progn
(defvar ,tag-symbol)
,@(nreverse forms)
;; Call cl-struct-define during compilation as well, so that
;; a subsequent cl-defstruct in the same file can correctly include this
;; struct as a parent.
(eval-and-compile
(cl-struct-define ',name ,docstring ',include-name
',type ,(eq named t) ',descs ',tag-symbol ',tag
',print-auto))
',name)))
So, if I compile Org against the CL library from Emacs 25.0, it's not
backwards compatible with Emacs 24.5. I could put a different compiled
version elsewhere for the older Emacs and will experiment with it.
The reason I thought that compatibility is no longer needed is because
Linux distributions usually package the bytecompiled Emacs Lisp
code. So, if someone was to get a newer version of Org, compiled with
the younger CL, that wouldn't work for them either.
Best,
Oleg