GNU bug report logs - #57929
29.0.50; package-quickstart.elc incompatible with Emacs 28.2 due to defvar-1

Previous Next

Package: emacs;

Reported by: Stefan Kangas <stefankangas <at> gmail.com>

Date: Mon, 19 Sep 2022 09:57:01 UTC

Severity: normal

Found in version 29.0.50

To reply to this bug, email your comments to 57929 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to monnier <at> iro.umontreal.ca, bug-gnu-emacs <at> gnu.org:
bug#57929; Package emacs. (Mon, 19 Sep 2022 09:57:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Stefan Kangas <stefankangas <at> gmail.com>:
New bug report received and forwarded. Copy sent to monnier <at> iro.umontreal.ca, bug-gnu-emacs <at> gnu.org. (Mon, 19 Sep 2022 09:57:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.0.50;
 package-quickstart.elc incompatible with Emacs 28.2 due to defvar-1
Date: Mon, 19 Sep 2022 05:56:39 -0400
It seems like the package-quickstart.elc is now backwards-incompatible
since defvar-1 is missing.

I guess this is a known issue whenever we change things like this, but I
thought it was worth pointing out since it bit me.  I had to delete
package-quickstart.elc to use Emacs 28 with packages.

Steps to reproduce:

0. mv ~/.emacs.d/elpa{,old}

[Using Emacs 29.0.50]
1. ${MASTER}/emacs -Q --batch --eval "(progn (package-initialize) \
                              (package-install 'yasnippet-snippets) \
                              (package-quickstart-refresh))"

[Using Emacs 28.2]
2. ${EMACS28}/emacs -Q --eval '(progn (toggle-debug-on-error) \
                                      (package-initialize))'

Result:

Debugger entered--Lisp error: (void-function defvar-1)
  defvar-1(yas-global-mode nil "Non-nil if Yas-Global mode is
enabled.\nSee the `ya...")
  byte-code("\304\211\30\31\305\302\306\307\304!\206\17\0\n@!\"\210\310\311\312\313\314$\210\315\316\317\314#\210\320\316\321\322#\210\323\316\312\321#\210\310\316\312\324\314$\210..."
[load-file-name load-true-file-name load-path package-activated-list
"/home/skangas/.emacs.d/elpa/yasnippet-0.14.0/yasni..." add-to-list
directory-file-name file-name-directory autoload yas-minor-mode
"yasnippet" "Toggle YASnippet mode.\n\nWhen YASnippet mode is ena..."
t put yas-global-mode globalized-minor-mode defvar-1 nil "Non-nil if
Yas-Global mode is enabled.\nSee the `ya..." custom-autoload "Toggle
Yas minor mode in all buffers.\nWith prefix ..." snippet-mode "A mode
for editing yasnippets" register-definition-prefixes
("help-snippet-def" "snippet-mode-map" "yas") provide
yasnippet-autoloads
"/home/skangas/.emacs.d/elpa/yasnippet-snippets-1.0..."
yasnippet-snippets-initialize "yasnippet-snippets" "Load the
`yasnippet-snippets' snippets directory." eval-after-load yasnippet
#f(compiled-function () #<bytecode 0x1f4006430b51>)
("yasnippet-snippets-") yasnippet-snippets-autoloads delete-dups
append (yasnippet yasnippet-snippets)] 6)
  load("~/.emacs.d/package-quickstart.elc" nil nomessage)
  package-activate-all()
  package-initialize()
  (progn (toggle-debug-on-error) (package-initialize))
  command-line-1(("--eval" "(progn (toggle-debug-on-error)
(package-initialize..."))
  command-line()
  normal-top-level()

In GNU Emacs 28.2.50 (build 2, x86_64-pc-linux-gnu, GTK+ Version
3.24.24, cairo version 1.16.0)
 of 2022-09-16 built on joffe
Repository revision: d04ba5ec73b15cb481859434e5dd1b91eb581803
Repository branch: emacs-28
Windowing system distributor 'The X.Org Foundation', version 11.0.12011000
System Description: Debian GNU/Linux 11 (bullseye)

Configured using:
 'configure --with-native-compilation'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES
NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF
TOOLKIT_SCROLL_BARS X11 XDBE XIM XPM GTK3 ZLIB

Important settings:
  value of $LC_COLLATE: C
  value of $LC_CTYPE: sv_SE.UTF-8
  value of $LC_TIME: C
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort hashcash mail-extr emacsbug message rmc puny dired
dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config
gnus-util rmail rmail-loaddefs auth-source eieio eieio-core
eieio-loaddefs password-cache json map text-property-search time-date
mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr
mail-utils comp comp-cstr warnings subr-x rx cl-seq cl-macs cl-extra
help-mode seq byte-opt gv cl-loaddefs cl-lib bytecomp byte-compile cconv
iso-transl tooltip eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer cl-generic
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice button loaddefs faces cus-face macroexp files
window text-properties overlay sha1 md5 base64 format env code-pages
mule custom widget hashtable-print-readable backquote threads dbusbind
inotify lcms2 dynamic-setting system-font-setting font-render-setting
cairo move-toolbar gtk x-toolkit x multi-tty make-network-process
native-compile emacs)

Memory information:
((conses 16 77702 7444)
 (symbols 48 7876 1)
 (strings 32 22191 3539)
 (string-bytes 1 770393)
 (vectors 16 17490)
 (vector-slots 8 308076 13362)
 (floats 8 29 38)
 (intervals 56 204 0)
 (buffers 992 11))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#57929; Package emacs. (Mon, 19 Sep 2022 12:40:01 GMT) Full text and rfc822 format available.

Message #8 received at 57929 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Stefan Kangas <stefan <at> marxist.se>
Cc: 57929 <at> debbugs.gnu.org
Subject: Re: bug#57929: 29.0.50; package-quickstart.elc incompatible with
 Emacs 28.2 due to defvar-1
Date: Mon, 19 Sep 2022 08:38:55 -0400
Stefan Kangas [2022-09-19 05:56:39] wrote:
> It seems like the package-quickstart.elc is now backwards-incompatible
> since defvar-1 is missing.

Yes, same old issue of compatibility for `.elc` files.

It would be good to improve our handling of such situations (for
`package-quickstart.elc` as well as for other compiled files such as
those in ELPA packages).

I can think of two ways to detect the problem:
- When loading the `.elc` file signals an error.
  [ It might be a legitimate error, but we could catch it and ask the
  user if we should try loading the non-compiled file instead.  ]
- When the loaded file's version marker is "too large".  The 4th byte of
  `.elc` files holds the major version of the Emacs that compiled it
  (except that 29.0.xx counts as 28, see comment in bytecomp.el:2390),
  so we could easily use this evidence that the file was compiled by
  a newer Emacs to skip the .`elc` file.

Once detected we could also delete the file, or recompile it, or suggest
doing one of those.  Deleting could throw away a handy file.
And recompiling may generate an invalid `.elc` file if some of the
dependencies defining macros aren't loaded (or may fail if some of the
required dependencies aren't in `load-path`).


        Stefan





This bug report was last modified 2 years and 65 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.