Nicolas Goaziou <m...@nicolasgoaziou.fr> 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