unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#55194: 29.0.50; Current master fails to bootstrap in the native-compilation configuration
@ 2022-04-30 13:27 Eli Zaretskii
  2022-04-30 14:27 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 3+ messages in thread
From: Eli Zaretskii @ 2022-04-30 13:27 UTC (permalink / raw)
  To: 55194; +Cc: Stefan Monnier

[-- Attachment #1: Type: text/plain, Size: 3702 bytes --]


As Subject says: I cannot bootstrap the current master configure with
native-compilation on GNU/Linux.  The last part of the build before
the failure is attached; it seems to have something to do with if-let
called in files.el, although that code is very old, and if-let is an
autoloaded macro.  Could this have something to do with the latest
changes regarding oclosure etc.?

The system configuration is as shown below, but with native-compilation
enabled.

P.S. Why do we call macros from subr-x, which is not preloaded, in
files.el, which _is_ preloaded?


In GNU Emacs 29.0.50 (build 46, x86_64-pc-linux-gnu, GTK+ Version 3.22.30, cairo version 1.15.10)
 of 2022-04-30 built on maintain0p.gnu.org
Repository revision: c1fa5bd8ee3c7f37a9b9304eab6b522cf8718472
Repository branch: master
System Description: Trisquel GNU/Linux Etiona (9.0.2)

Configured using:
 'configure --with-gif=no --with-tiff=no --with-jpeg=no
 --with-xpm=ifavailable --with-modules --enable-checking=yes,glyphs
 'CFLAGS=-O0 -g3''

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

Important settings:
  value of $LC_ALL: en_US.UTF-8
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  display-time-mode: t
  savehist-mode: t
  save-place-mode: t
  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
  line-number-mode: t
  indent-tabs-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow flyspell ispell emacsbug message mailcap yank-media rmc puny
dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg
rfc6068 epg-config gnus-util text-property-search time-date mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util
mail-prsvr mail-utils term/xterm xterm seq gv subr-x byte-opt bytecomp
byte-compile cconv server time cus-load savehist saveplace 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
nadvice simple 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 abbrev obarray oclosure cl-preloaded button
loaddefs faces cus-face macroexp files window text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget keymap
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 emacs)

Memory information:
((conses 16 56423 6197)
 (symbols 48 6938 1)
 (strings 32 18595 687)
 (string-bytes 1 585015)
 (vectors 16 9448)
 (vector-slots 8 109991 8462)
 (floats 8 29 338)
 (intervals 56 213 0)
 (buffers 992 8))


[-- Attachment #2: build.log --]
[-- Type: application/octet-stream, Size: 46497 bytes --]

make -C lib all
make -C doc/lispref info
make -C doc/lispintro info
make -C doc/emacs info
make[1]: Entering directory '/home/eliz/git/emacs/native-comp/doc/lispref'
make[1]: Nothing to be done for 'info'.
make[1]: Entering directory '/home/eliz/git/emacs/native-comp/doc/lispintro'
make[1]: Leaving directory '/home/eliz/git/emacs/native-comp/doc/lispref'
make[1]: Nothing to be done for 'info'.
make[1]: Leaving directory '/home/eliz/git/emacs/native-comp/doc/lispintro'
make[1]: Entering directory '/home/eliz/git/emacs/native-comp/doc/emacs'
make[1]: Nothing to be done for 'info'.
make[1]: Leaving directory '/home/eliz/git/emacs/native-comp/doc/emacs'
make[1]: Entering directory '/home/eliz/git/emacs/native-comp/lib'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/eliz/git/emacs/native-comp/lib'
make -C lib-src all
make[1]: Entering directory '/home/eliz/git/emacs/native-comp/lib-src'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/eliz/git/emacs/native-comp/lib-src'
make -C src VCSWITNESS='$(srcdir)/../.git/logs/HEAD' BIN_DESTDIR=''/usr/local/bin/'' \
	 ELN_DESTDIR='/usr/local/lib/emacs/29.0.50/' all
make[1]: Entering directory '/home/eliz/git/emacs/native-comp/src'
make -C ../admin/charsets all
make -C ../admin/unidata charscript.el
make -C ../admin/unidata emoji-zwj.el
make -C ../admin/charsets cp51932.el
make[2]: Entering directory '/home/eliz/git/emacs/native-comp/admin/unidata'
make[2]: Entering directory '/home/eliz/git/emacs/native-comp/admin/unidata'
make[2]: Entering directory '/home/eliz/git/emacs/native-comp/admin/charsets'
make[2]: Nothing to be done for 'cp51932.el'.
make[2]: Leaving directory '/home/eliz/git/emacs/native-comp/admin/charsets'
make -C ../admin/charsets eucjp-ms.el
make[2]: Nothing to be done for 'emoji-zwj.el'.
make[2]: Leaving directory '/home/eliz/git/emacs/native-comp/admin/unidata'
make[2]: Nothing to be done for 'charscript.el'.
make[2]: Leaving directory '/home/eliz/git/emacs/native-comp/admin/unidata'
make[2]: Entering directory '/home/eliz/git/emacs/native-comp/admin/charsets'
make[2]: Nothing to be done for 'eucjp-ms.el'.
make[2]: Leaving directory '/home/eliz/git/emacs/native-comp/admin/charsets'
make[2]: Entering directory '/home/eliz/git/emacs/native-comp/admin/charsets'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/eliz/git/emacs/native-comp/admin/charsets'
rm -f bootstrap-emacs.pdmp
./temacs --batch  -l loadup --temacs=pbootstrap \
	--bin-dest /usr/local/bin/ --eln-dest /usr/local/lib/emacs/29.0.50/
Loading loadup.el (source)...
Dump mode: pbootstrap
Using load-path (/home/eliz/git/emacs/native-comp/lisp /home/eliz/git/emacs/native-comp/lisp/emacs-lisp /home/eliz/git/emacs/native-comp/lisp/progmodes /home/eliz/git/emacs/native-comp/lisp/language /home/eliz/git/emacs/native-comp/lisp/international /home/eliz/git/emacs/native-comp/lisp/textmodes /home/eliz/git/emacs/native-comp/lisp/vc)
Loading emacs-lisp/debug-early (source)...
Loading emacs-lisp/byte-run (source)...
Loading emacs-lisp/backquote (source)...
Loading subr (source)...
Loading keymap (source)...
Loading version (source)...
Loading widget (source)...
Loading custom (source)...
Loading emacs-lisp/map-ynp (source)...
Loading international/mule (source)...
Loading international/mule-conf (source)...
Loading env (source)...
Loading format (source)...
Loading bindings (source)...
Loading window (source)...
Loading /home/eliz/git/emacs/native-comp/lisp/files.el (source)...

Error: void-function (if-let)
  mapbacktrace((closure ((prin1 . prin1) t) (evald func args _flags) (let ((args args)) (if evald (progn (princ "  ") (funcall prin1 func) (princ "(")) (progn (princ "  (") (setq args (cons func args)))) (if args (while (progn (funcall prin1 (car args)) (setq args (cdr args))) (princ " "))) (princ ")\n"))))
  (let ((print-escape-newlines t) (print-escape-control-characters t) (print-escape-nonascii t) (prin1 (if (fboundp 'cl-prin1) #'cl-prin1 #'prin1))) (mapbacktrace #'(lambda (evald func args _flags) (let ((args args)) (if evald (progn (princ "  ") (funcall prin1 func) (princ "(")) (progn (princ "  (") (setq args (cons func args)))) (if args (while (progn (funcall prin1 (car args)) (setq args (cdr args))) (princ " "))) (princ ")\n")))))
  debug-early-backtrace()
  debug-early(error (void-function if-let))
  (if-let ((newline (string-search "\n" string start))) (progn (when (or (not omit-nulls) (not (= start newline))) (let ((line (substring string start (if keep-newlines (1+ newline) newline)))) (when (not (and keep-newlines omit-nulls (equal line "\n"))) (push line lines)))) (setq start (1+ newline)) (when (and (= start (length string)) (not omit-nulls) (not keep-newlines)) (push "" lines))) (if (zerop start) (push string lines) (push (substring string start) lines)) (setq start (length string)))
  (while (< start (length string)) (if-let ((newline (string-search "\n" string start))) (progn (when (or (not omit-nulls) (not (= start newline))) (let ((line (substring string start (if keep-newlines (1+ newline) newline)))) (when (not (and keep-newlines omit-nulls (equal line "\n"))) (push line lines)))) (setq start (1+ newline)) (when (and (= start (length string)) (not omit-nulls) (not keep-newlines)) (push "" lines))) (if (zerop start) (push string lines) (push (substring string start) lines)) (setq start (length string))))
  (let ((lines nil) (start 0)) (while (< start (length string)) (if-let ((newline (string-search "\n" string start))) (progn (when (or (not omit-nulls) (not (= start newline))) (let ((line (substring string start (if keep-newlines (1+ newline) newline)))) (when (not (and keep-newlines omit-nulls (equal line "\n"))) (push line lines)))) (setq start (1+ newline)) (when (and (= start (length string)) (not omit-nulls) (not keep-newlines)) (push "" lines))) (if (zerop start) (push string lines) (push (substring string start) lines)) (setq start (length string)))) (nreverse lines))
  string-lines("Toggle automatic saving to file-visiting buffers on or off.\n\nUnlike `auto-save-mode', this mode will auto-save buffer contents\nto the visited files directly and will also run all save-related\nhooks.  See Info node `Saving' for details of the save process.\n\nYou can also set the buffer-local value of the variable\n`auto-save-visited-mode' to nil.  A buffer where the buffer-local\nvalue of this variable is nil is ignored for the purpose of\n`auto-save-visited-mode', even if `auto-save-visited-mode' is\nenabled.")
  (if doc (string-lines doc) (list (format "Toggle %s on or off." mode-pretty-name)))
  (let ((lines (if doc (string-lines doc) (list (format "Toggle %s on or off." mode-pretty-name))))) (insert (car-safe (prog1 lines (setq lines (cdr lines))))) (ensure-empty-lines) (while (and lines (equal (car lines) "")) (car-safe (prog1 lines (setq lines (cdr lines))))) (let ((--dolist-tail-- lines)) (while --dolist-tail-- (let ((line (car --dolist-tail--))) (insert line "\n") (setq --dolist-tail-- (cdr --dolist-tail--))))) (ensure-empty-lines) (let* ((fill-prefix nil) (docs-fc (and (boundp 'emacs-lisp-docstring-fill-column) emacs-lisp-docstring-fill-column)) (fill-column (if (integerp docs-fc) docs-fc 65)) (argdoc (format easy-mmode--arg-docstring (if global "global " "") mode-pretty-name (string-replace "'" "\\='" (format "%S" getter))))) (let ((start (point))) (insert argdoc) (if (fboundp 'fill-region) (progn (fill-region start (point) 'left t))))) (if (and (boundp keymap-sym) (or (not doc) (not (string-search "\\{" doc)))) (progn (ensure-empty-lines) (insert (format "\\{%s}" keymap-sym)))) (buffer-string))
  (progn (let ((lines (if doc (string-lines doc) (list (format "Toggle %s on or off." mode-pretty-name))))) (insert (car-safe (prog1 lines (setq lines (cdr lines))))) (ensure-empty-lines) (while (and lines (equal (car lines) "")) (car-safe (prog1 lines (setq lines (cdr lines))))) (let ((--dolist-tail-- lines)) (while --dolist-tail-- (let ((line (car --dolist-tail--))) (insert line "\n") (setq --dolist-tail-- (cdr --dolist-tail--))))) (ensure-empty-lines) (let* ((fill-prefix nil) (docs-fc (and (boundp 'emacs-lisp-docstring-fill-column) emacs-lisp-docstring-fill-column)) (fill-column (if (integerp docs-fc) docs-fc 65)) (argdoc (format easy-mmode--arg-docstring (if global "global " "") mode-pretty-name (string-replace "'" "\\='" (format "%S" getter))))) (let ((start (point))) (insert argdoc) (if (fboundp 'fill-region) (progn (fill-region start (point) 'left t))))) (if (and (boundp keymap-sym) (or (not doc) (not (string-search "\\{" doc)))) (progn (ensure-empty-lines) (insert (format "\\{%s}" keymap-sym)))) (buffer-string)))
  (unwind-protect (progn (let ((lines (if doc (string-lines doc) (list (format "Toggle %s on or off." mode-pretty-name))))) (insert (car-safe (prog1 lines (setq lines (cdr lines))))) (ensure-empty-lines) (while (and lines (equal (car lines) "")) (car-safe (prog1 lines (setq lines (cdr lines))))) (let ((--dolist-tail-- lines)) (while --dolist-tail-- (let ((line (car --dolist-tail--))) (insert line "\n") (setq --dolist-tail-- (cdr --dolist-tail--))))) (ensure-empty-lines) (let* ((fill-prefix nil) (docs-fc (and (boundp 'emacs-lisp-docstring-fill-column) emacs-lisp-docstring-fill-column)) (fill-column (if (integerp docs-fc) docs-fc 65)) (argdoc (format easy-mmode--arg-docstring (if global "global " "") mode-pretty-name (string-replace "'" "\\='" (format "%S" getter))))) (let ((start (point))) (insert argdoc) (if (fboundp 'fill-region) (progn (fill-region start (point) 'left t))))) (if (and (boundp keymap-sym) (or (not doc) (not (string-search "\\{" doc)))) (progn (ensure-empty-lines) (insert (format "\\{%s}" keymap-sym)))) (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))
  (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (let ((lines (if doc (string-lines doc) (list (format "Toggle %s on or off." mode-pretty-name))))) (insert (car-safe (prog1 lines (setq lines (cdr lines))))) (ensure-empty-lines) (while (and lines (equal (car lines) "")) (car-safe (prog1 lines (setq lines (cdr lines))))) (let ((--dolist-tail-- lines)) (while --dolist-tail-- (let ((line (car --dolist-tail--))) (insert line "\n") (setq --dolist-tail-- (cdr --dolist-tail--))))) (ensure-empty-lines) (let* ((fill-prefix nil) (docs-fc (and (boundp 'emacs-lisp-docstring-fill-column) emacs-lisp-docstring-fill-column)) (fill-column (if (integerp docs-fc) docs-fc 65)) (argdoc (format easy-mmode--arg-docstring (if global "global " "") mode-pretty-name (string-replace "'" "\\='" (format "%S" getter))))) (let ((start (point))) (insert argdoc) (if (fboundp 'fill-region) (progn (fill-region start (point) 'left t))))) (if (and (boundp keymap-sym) (or (not doc) (not (string-search "\\{" doc)))) (progn (ensure-empty-lines) (insert (format "\\{%s}" keymap-sym)))) (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))
  (let ((temp-buffer (generate-new-buffer " *temp*" t))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (let ((lines (if doc (string-lines doc) (list (format "Toggle %s on or off." mode-pretty-name))))) (insert (car-safe (prog1 lines (setq lines (cdr lines))))) (ensure-empty-lines) (while (and lines (equal (car lines) "")) (car-safe (prog1 lines (setq lines (cdr lines))))) (let ((--dolist-tail-- lines)) (while --dolist-tail-- (let ((line (car --dolist-tail--))) (insert line "\n") (setq --dolist-tail-- (cdr --dolist-tail--))))) (ensure-empty-lines) (let* ((fill-prefix nil) (docs-fc (and (boundp 'emacs-lisp-docstring-fill-column) emacs-lisp-docstring-fill-column)) (fill-column (if (integerp docs-fc) docs-fc 65)) (argdoc (format easy-mmode--arg-docstring (if global "global " "") mode-pretty-name (string-replace "'" "\\='" (format "%S" getter))))) (let ((start (point))) (insert argdoc) (if (fboundp 'fill-region) (progn (fill-region start (point) 'left t))))) (if (and (boundp keymap-sym) (or (not doc) (not (string-search "\\{" doc)))) (progn (ensure-empty-lines) (insert (format "\\{%s}" keymap-sym)))) (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))))
  (if (and doc (string-match-p "\\bARG\\b" doc)) doc (let ((temp-buffer (generate-new-buffer " *temp*" t))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (let ((lines (if doc (string-lines doc) (list (format "Toggle %s on or off." mode-pretty-name))))) (insert (car-safe (prog1 lines (setq lines (cdr lines))))) (ensure-empty-lines) (while (and lines (equal (car lines) "")) (car-safe (prog1 lines (setq lines (cdr lines))))) (let ((--dolist-tail-- lines)) (while --dolist-tail-- (let ((line (car --dolist-tail--))) (insert line "\n") (setq --dolist-tail-- (cdr --dolist-tail--))))) (ensure-empty-lines) (let* ((fill-prefix nil) (docs-fc (and (boundp 'emacs-lisp-docstring-fill-column) emacs-lisp-docstring-fill-column)) (fill-column (if (integerp docs-fc) docs-fc 65)) (argdoc (format easy-mmode--arg-docstring (if global "global " "") mode-pretty-name (string-replace "'" "\\='" (format "%S" getter))))) (let ((start (point))) (insert argdoc) (if (fboundp 'fill-region) (progn (fill-region start (point) 'left t))))) (if (and (boundp keymap-sym) (or (not doc) (not (string-search "\\{" doc)))) (progn (ensure-empty-lines) (insert (format "\\{%s}" keymap-sym)))) (buffer-string))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))))
  easy-mmode--mode-docstring("Toggle automatic saving to file-visiting buffers on or off.\n\nUnlike `auto-save-mode', this mode will auto-save buffer contents\nto the visited files directly and will also run all save-related\nhooks.  See Info node `Saving' for details of the save process.\n\nYou can also set the buffer-local value of the variable\n`auto-save-visited-mode' to nil.  A buffer where the buffer-local\nvalue of this variable is nil is ignored for the purpose of\n`auto-save-visited-mode', even if `auto-save-visited-mode' is\nenabled." "Auto-Save-Visited mode" auto-save-visited-mode-map (default-value 'auto-save-visited-mode) t)
  (list 'defun modefun (cons '&optional (cons 'arg extra-args)) (easy-mmode--mode-docstring doc pretty-name keymap-sym getter globalp) (if interactive (progn (if (consp interactive) (cons 'interactive (cons '(list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 'toggle)) interactive)) '(interactive (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 'toggle)))))) (cons 'let (cons (list (cons last-message '((current-message)))) (cons (append setter (list (cons 'cond (cons (list '(eq arg 'toggle) (list 'not getter)) '(((and (numberp arg) (< arg 1)) nil) (t t)))))) (append (if globalp (list (list 'when '(boundp 'global-minor-modes) (list 'setq 'global-minor-modes (cons 'delq (cons (list 'quote modefun) '(global-minor-modes)))) (list 'when getter (cons 'push (cons (list 'quote modefun) '(global-minor-modes)))))) (list (list 'when '(boundp 'local-minor-modes) (list 'setq 'local-minor-modes (cons 'delq (cons (list 'quote modefun) '(local-minor-modes)))) (list 'when getter (cons 'push (cons (list 'quote modefun) '(local-minor-modes))))))) body (list (list 'run-hooks (list 'quote hook) (list 'if getter (list 'quote hook-on) (list 'quote hook-off))) (list 'if '(called-interactively-p 'any) (list 'progn (if (and globalp (not variable)) (list 'customize-mark-as-set (list 'quote mode))) (list 'unless (list 'and '(current-message) (list 'not (cons 'equal (cons last-message '((current-message)))))) (list 'let (list (list 'local (if globalp "" " in current buffer"))) (cons 'message (cons (format "%s %%sabled%%s" pretty-name) (cons (cons 'if (cons getter '("en" "dis"))) '(local))))))))) (if after-hook (progn (list after-hook))))))) '(force-mode-line-update) getter)
  (funcall warnwrap (list 'defun modefun (cons '&optional (cons 'arg extra-args)) (easy-mmode--mode-docstring doc pretty-name keymap-sym getter globalp) (if interactive (progn (if (consp interactive) (cons 'interactive (cons '(list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 'toggle)) interactive)) '(interactive (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 'toggle)))))) (cons 'let (cons (list (cons last-message '((current-message)))) (cons (append setter (list (cons 'cond (cons (list '(eq arg 'toggle) (list 'not getter)) '(((and (numberp arg) (< arg 1)) nil) (t t)))))) (append (if globalp (list (list 'when '(boundp 'global-minor-modes) (list 'setq 'global-minor-modes (cons 'delq (cons (list 'quote modefun) '(global-minor-modes)))) (list 'when getter (cons 'push (cons (list 'quote modefun) '(global-minor-modes)))))) (list (list 'when '(boundp 'local-minor-modes) (list 'setq 'local-minor-modes (cons 'delq (cons (list 'quote modefun) '(local-minor-modes)))) (list 'when getter (cons 'push (cons (list 'quote modefun) '(local-minor-modes))))))) body (list (list 'run-hooks (list 'quote hook) (list 'if getter (list 'quote hook-on) (list 'quote hook-off))) (list 'if '(called-interactively-p 'any) (list 'progn (if (and globalp (not variable)) (list 'customize-mark-as-set (list 'quote mode))) (list 'unless (list 'and '(current-message) (list 'not (cons 'equal (cons last-message '((current-message)))))) (list 'let (list (list 'local (if globalp "" " in current buffer"))) (cons 'message (cons (format "%s %%sabled%%s" pretty-name) (cons (cons 'if (cons getter '("en" "dis"))) '(local))))))))) (if after-hook (progn (list after-hook))))))) '(force-mode-line-update) getter))
  (list 'progn (cond (variable nil) ((not globalp) (list 'progn ':autoload-end (list 'defvar-local mode init-value (concat (format "Non-nil if %s is enabled.\n" pretty-name) (internal--format-docstring-line "Use the command `%s' to change this variable." mode))))) (t (let ((base-doc-string (concat "Non-nil if %s is enabled.\nSee the `%s' command\nfor a description of this minor mode." (if body "\nSetting this variable directly does not take effect;\neither customize it (see the info node `Easy Customization')\nor call the function `%s'.")))) (cons 'defcustom (cons mode (cons init-value (cons (format base-doc-string pretty-name mode mode) (append set initialize type (nreverse extra-keywords))))))))) (funcall warnwrap (list 'defun modefun (cons '&optional (cons 'arg extra-args)) (easy-mmode--mode-docstring doc pretty-name keymap-sym getter globalp) (if interactive (progn (if (consp interactive) (cons 'interactive (cons '(list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 'toggle)) interactive)) '(interactive (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 'toggle)))))) (cons 'let (cons (list (cons last-message '((current-message)))) (cons (append setter (list (cons 'cond (cons (list '(eq arg 'toggle) (list 'not getter)) '(((and (numberp arg) (< arg 1)) nil) (t t)))))) (append (if globalp (list (list 'when '(boundp 'global-minor-modes) (list 'setq 'global-minor-modes (cons 'delq (cons (list 'quote modefun) '(global-minor-modes)))) (list 'when getter (cons 'push (cons (list 'quote modefun) '(global-minor-modes)))))) (list (list 'when '(boundp 'local-minor-modes) (list 'setq 'local-minor-modes (cons 'delq (cons (list 'quote modefun) '(local-minor-modes)))) (list 'when getter (cons 'push (cons (list 'quote modefun) '(local-minor-modes))))))) body (list (list 'run-hooks (list 'quote hook) (list 'if getter (list 'quote hook-on) (list 'quote hook-off))) (list 'if '(called-interactively-p 'any) (list 'progn (if (and globalp (not variable)) (list 'customize-mark-as-set (list 'quote mode))) (list 'unless (list 'and '(current-message) (list 'not (cons 'equal (cons last-message '((current-message)))))) (list 'let (list (list 'local (if globalp "" " in current buffer"))) (cons 'message (cons (format "%s %%sabled%%s" pretty-name) (cons (cons 'if (cons getter '("en" "dis"))) '(local))))))))) (if after-hook (progn (list after-hook))))))) '(force-mode-line-update) getter)) ':autoload-end (cons 'defvar (cons hook '(nil))) (list 'unless (cons 'get (cons (list 'quote hook) '('variable-documentation))) (list 'put (list 'quote hook) ''variable-documentation (format "Hook run after entering or leaving `%s'.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" modefun))) (cons 'put (cons (list 'quote hook) '('custom-type 'hook))) (cons 'put (cons (list 'quote hook) '('standard-value (list nil)))) (if (symbolp keymap) nil (list 'defvar keymap-sym (cons 'let (cons (list (list 'm keymap)) '((cond ((keymapp m) m) ((listp m) (easy-mmode-define-keymap m)) (t (error "Invalid keymap %S" m)))))) (format "Keymap for `%s'." mode-name))) (let ((modevar (if (consp getter) (let* ((x38 (car-safe getter))) (if (eq x38 'default-value) (let* ((x39 (cdr-safe getter))) (if (consp x39) (let* ((x40 (car-safe x39))) (if (consp x40) (let* ((x41 (car-safe x40))) (if (eq x41 'quote) (let* ((x42 (cdr-safe x40))) (if (consp x42) (let* ((x43 (car-safe x42)) (x44 (cdr-safe x42))) (if (null x44) (let* ((x45 (cdr-safe x39))) (if (null x45) (let ((v x43)) v) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter)))) (if (not (symbolp modevar)) (if (or lighter keymap) (error ":lighter and :keymap unsupported with mode expression %S" getter)) (list 'with-no-warnings (list 'add-minor-mode (list 'quote modevar) (list 'quote lighter) (if keymap keymap-sym (list 'if (list 'boundp (list 'quote keymap-sym)) keymap-sym)) nil (if (eq mode modefun) nil (list 'quote modefun)))))))
  (let* ((last-message (make-symbol "last-message")) (mode-name (symbol-name mode)) (init-value nil) (keymap nil) (lighter nil) (pretty-name nil) (globalp nil) (set nil) (initialize nil) (type nil) (extra-args nil) (extra-keywords nil) (variable nil) (setter (list 'setq mode)) (getter mode) (modefun mode) (after-hook nil) (hook (intern (concat mode-name "-hook"))) (hook-on (intern (concat mode-name "-on-hook"))) (hook-off (intern (concat mode-name "-off-hook"))) (interactive t) (warnwrap (if (or (null body) (keywordp (car body))) #'identity #'(lambda (exp) (macroexp-warn-and-return "Use keywords rather than deprecated positional arguments to `define-minor-mode'" exp)))) keyw keymap-sym tmp) (if (keywordp (car body)) nil (setq init-value (car-safe (prog1 body (setq body (cdr body))))) (if (keywordp (car body)) nil (setq lighter (car-safe (prog1 body (setq body (cdr body))))) (if (keywordp (car body)) nil (setq keymap (car-safe (prog1 body (setq body (cdr body)))))))) (while (keywordp (setq keyw (car body))) (setq body (cdr body)) (cond ((eq keyw :init-value) (let nil (setq init-value (car-safe (prog1 body (setq body (cdr body))))))) ((eq keyw :lighter) (let nil (setq lighter (purecopy (car-safe (prog1 body (setq body (cdr body)))))))) ((eq keyw :global) (let nil (setq globalp (car-safe (prog1 body (setq body (cdr body))))) (if (and globalp (symbolp mode)) (progn (setq setter (list 'setq-default mode)) (setq getter (list 'default-value (list 'quote mode))))))) ((eq keyw :extra-args) (let nil (setq extra-args (car-safe (prog1 body (setq body (cdr body))))))) ((eq keyw :set) (let nil (setq set (list :set (car-safe (prog1 body (setq body (cdr body)))))))) ((eq keyw :initialize) (let nil (setq initialize (list :initialize (car-safe (prog1 body (setq body (cdr body)))))))) ((eq keyw :type) (let nil (setq type (list :type (car-safe (prog1 body (setq body (cdr body)))))))) ((eq keyw :keymap) (let nil (setq keymap (car-safe (prog1 body (setq body (cdr body))))))) ((eq keyw :interactive) (let nil (setq interactive (car-safe (prog1 body (setq body (cdr body))))))) ((eq keyw :variable) (let nil (setq variable (car-safe (prog1 body (setq body (cdr body))))) (if (not (and (setq tmp (cdr-safe variable)) (or (symbolp tmp) (functionp tmp)))) (progn (setq setter (list 'setf variable)) (setq getter variable)) (setq getter (car variable)) (setq setter (list 'funcall (list 'function (cdr variable))))))) ((eq keyw :after-hook) (let nil (setq after-hook (car-safe (prog1 body (setq body (cdr body))))))) (t (let nil (setq extra-keywords (cons keyw extra-keywords)) (setq extra-keywords (cons (car-safe (prog1 body (setq body (cdr body)))) extra-keywords)))))) (setq pretty-name (easy-mmode-pretty-mode-name mode lighter)) (setq keymap-sym (if (and keymap (symbolp keymap)) keymap (intern (concat mode-name "-map")))) (if set nil (setq set '(:set #'custom-set-minor-mode))) (if initialize nil (setq initialize '(:initialize #'custom-initialize-default))) (if type nil (setq type '(:type 'boolean))) (list 'progn (cond (variable nil) ((not globalp) (list 'progn ':autoload-end (list 'defvar-local mode init-value (concat (format "Non-nil if %s is enabled.\n" pretty-name) (internal--format-docstring-line "Use the command `%s' to change this variable." mode))))) (t (let ((base-doc-string (concat "Non-nil if %s is enabled.\nSee the `%s' command\nfor a description of this minor mode." (if body "\nSetting this variable directly does not take effect;\neither customize it (see the info node `Easy Customization')\nor call the function `%s'.")))) (cons 'defcustom (cons mode (cons init-value (cons (format base-doc-string pretty-name mode mode) (append set initialize type (nreverse extra-keywords))))))))) (funcall warnwrap (list 'defun modefun (cons '&optional (cons 'arg extra-args)) (easy-mmode--mode-docstring doc pretty-name keymap-sym getter globalp) (if interactive (progn (if (consp interactive) (cons 'interactive (cons '(list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 'toggle)) interactive)) '(interactive (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 'toggle)))))) (cons 'let (cons (list (cons last-message '((current-message)))) (cons (append setter (list (cons 'cond (cons (list '(eq arg 'toggle) (list 'not getter)) '(((and (numberp arg) (< arg 1)) nil) (t t)))))) (append (if globalp (list (list 'when '(boundp 'global-minor-modes) (list 'setq 'global-minor-modes (cons 'delq (cons (list 'quote modefun) '(global-minor-modes)))) (list 'when getter (cons 'push (cons (list 'quote modefun) '(global-minor-modes)))))) (list (list 'when '(boundp 'local-minor-modes) (list 'setq 'local-minor-modes (cons 'delq (cons (list 'quote modefun) '(local-minor-modes)))) (list 'when getter (cons 'push (cons (list 'quote modefun) '(local-minor-modes))))))) body (list (list 'run-hooks (list 'quote hook) (list 'if getter (list 'quote hook-on) (list 'quote hook-off))) (list 'if '(called-interactively-p 'any) (list 'progn (if (and globalp (not variable)) (list 'customize-mark-as-set (list 'quote mode))) (list 'unless (list 'and '(current-message) (list 'not (cons 'equal (cons last-message '((current-message)))))) (list 'let (list (list 'local (if globalp "" " in current buffer"))) (cons 'message (cons (format "%s %%sabled%%s" pretty-name) (cons (cons 'if (cons getter '("en" "dis"))) '(local))))))))) (if after-hook (progn (list after-hook))))))) '(force-mode-line-update) getter)) ':autoload-end (cons 'defvar (cons hook '(nil))) (list 'unless (cons 'get (cons (list 'quote hook) '('variable-documentation))) (list 'put (list 'quote hook) ''variable-documentation (format "Hook run after entering or leaving `%s'.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" modefun))) (cons 'put (cons (list 'quote hook) '('custom-type 'hook))) (cons 'put (cons (list 'quote hook) '('standard-value (list nil)))) (if (symbolp keymap) nil (list 'defvar keymap-sym (cons 'let (cons (list (list 'm keymap)) '((cond ((keymapp m) m) ((listp m) (easy-mmode-define-keymap m)) (t (error "Invalid keymap %S" m)))))) (format "Keymap for `%s'." mode-name))) (let ((modevar (if (consp getter) (let* ((x38 (car-safe getter))) (if (eq x38 'default-value) (let* ((x39 (cdr-safe getter))) (if (consp x39) (let* ((x40 (car-safe x39))) (if (consp x40) (let* ((x41 (car-safe x40))) (if (eq x41 'quote) (let* ((x42 (cdr-safe x40))) (if (consp x42) (let* ((x43 (car-safe x42)) (x44 (cdr-safe x42))) (if (null x44) (let* ((x45 (cdr-safe x39))) (if (null x45) (let ((v x43)) v) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter)))) (if (not (symbolp modevar)) (if (or lighter keymap) (error ":lighter and :keymap unsupported with mode expression %S" getter)) (list 'with-no-warnings (list 'add-minor-mode (list 'quote modevar) (list 'quote lighter) (if keymap keymap-sym (list 'if (list 'boundp (list 'quote keymap-sym)) keymap-sym)) nil (if (eq mode modefun) nil (list 'quote modefun))))))))
  (closure (t) (mode doc &rest body) "Define a new minor mode MODE.\nThis defines the toggle command MODE and (by default) a control variable\nMODE (you can override this with the :variable keyword, see below).\nDOC is the documentation for the mode toggle command.\n\nThe defined mode command takes one optional (prefix) argument.\nInteractively with no prefix argument, it toggles the mode.\nA prefix argument enables the mode if the argument is positive,\nand disables it otherwise.\n\nWhen called from Lisp, the mode command toggles the mode if the\nargument is `toggle', disables the mode if the argument is a\nnon-positive integer, and enables the mode otherwise (including\nif the argument is omitted or nil or a positive integer).\n\nIf DOC is nil, give the mode command a basic doc-string\ndocumenting what its argument does.  If the word \"ARG\" does not\nappear in DOC, a paragraph is added to DOC explaining\nusage of the mode argument.\n\nBODY contains code to execute each time the mode is enabled or disabled.\n  It is executed after toggling the mode, and before running MODE-hook.\n  Before the actual body code, you can write keyword arguments, i.e.\n  alternating keywords and values.  If you provide BODY, then you must\n  provide at least one keyword argument (e.g. `:lighter nil`).\n  The following special keywords are supported (other keywords are passed\n  to `defcustom' if the minor mode is global):\n\n:global GLOBAL\11If non-nil specifies that the minor mode is not meant to be\n\11\11buffer-local, so don't make the variable MODE buffer-local.\n\11\11By default, the mode is buffer-local.\n:init-value VAL\11the initial value of the mode's variable.\n\11\11Note that the minor mode function won't be called by setting\n\11\11this option, so the value *reflects* the minor mode's natural\n\11\11initial state, rather than *setting* it.\n\11\11In the vast majority of cases it should be nil.\n\11\11Not used if you also specify :variable.\n:lighter SPEC\11Text displayed in the mode line when the mode is on.\n:keymap MAP\11Keymap bound to the mode keymap.  Defaults to `MODE-map'.\n                If non-nil, it should be an unquoted variable name (whose value\n                is a keymap), or an expression that returns either a keymap or\n\11\11a list of (KEY . BINDING) pairs where KEY and BINDING are\n\11\11suitable for `define-key'.  If you supply a KEYMAP argument\n\11\11that is not a symbol, this macro defines the variable MODE-map\n\11\11and gives it the value that KEYMAP specifies.\n:interactive VAL  Whether this mode should be a command or not.  The default\n                is to make it one; use nil to avoid that.  If VAL is a list,\n                it's interpreted as a list of major modes this minor mode\n                is useful in.\n:variable PLACE\11The location to use instead of the variable MODE to store\n\11\11the state of the mode.\11This can be simply a different\n\11\11named variable, or a generalized variable.\n\11\11PLACE can also be of the form (GET . SET), where GET is\n\11\11an expression that returns the current state, and SET is\n\11\11a function that takes one argument, the new state, which should\n                be assigned to PLACE.  If you specify a :variable, this function\n                does not define a MODE variable (nor any of the terms used\n\11\11in :variable).\n:after-hook     A single Lisp form which is evaluated after the mode hooks\n                have been run.  It should not be quoted.\n\nFor example, you could write\n  (define-minor-mode foo-mode \"If enabled, foo on you!\"\n    :lighter \" Foo\" :require \\='foo :global t :group \\='hassle :version \"27.5\"\n    ...BODY CODE...)\n\nFor backward compatibility with the Emacs<21 calling convention,\nthe keywords can also be preceded by the obsolete triplet\nINIT-VALUE LIGHTER KEYMAP.\n\n(fn MODE DOC [KEYWORD VAL ... &rest BODY])" (let* ((last-message (make-symbol "last-message")) (mode-name (symbol-name mode)) (init-value nil) (keymap nil) (lighter nil) (pretty-name nil) (globalp nil) (set nil) (initialize nil) (type nil) (extra-args nil) (extra-keywords nil) (variable nil) (setter (list 'setq mode)) (getter mode) (modefun mode) (after-hook nil) (hook (intern (concat mode-name "-hook"))) (hook-on (intern (concat mode-name "-on-hook"))) (hook-off (intern (concat mode-name "-off-hook"))) (interactive t) (warnwrap (if (or (null body) (keywordp (car body))) #'identity #'(lambda (exp) (macroexp-warn-and-return "Use keywords rather than deprecated positional arguments to `define-minor-mode'" exp)))) keyw keymap-sym tmp) (if (keywordp (car body)) nil (setq init-value (car-safe (prog1 body (setq body (cdr body))))) (if (keywordp (car body)) nil (setq lighter (car-safe (prog1 body (setq body (cdr body))))) (if (keywordp (car body)) nil (setq keymap (car-safe (prog1 body (setq body (cdr body)))))))) (while (keywordp (setq keyw (car body))) (setq body (cdr body)) (cond ((eq keyw :init-value) (let nil (setq init-value (car-safe (prog1 body (setq body (cdr body))))))) ((eq keyw :lighter) (let nil (setq lighter (purecopy (car-safe (prog1 body (setq body (cdr body)))))))) ((eq keyw :global) (let nil (setq globalp (car-safe (prog1 body (setq body (cdr body))))) (if (and globalp (symbolp mode)) (progn (setq setter (list 'setq-default mode)) (setq getter (list 'default-value (list 'quote mode))))))) ((eq keyw :extra-args) (let nil (setq extra-args (car-safe (prog1 body (setq body (cdr body))))))) ((eq keyw :set) (let nil (setq set (list :set (car-safe (prog1 body (setq body (cdr body)))))))) ((eq keyw :initialize) (let nil (setq initialize (list :initialize (car-safe (prog1 body (setq body (cdr body)))))))) ((eq keyw :type) (let nil (setq type (list :type (car-safe (prog1 body (setq body (cdr body)))))))) ((eq keyw :keymap) (let nil (setq keymap (car-safe (prog1 body (setq body (cdr body))))))) ((eq keyw :interactive) (let nil (setq interactive (car-safe (prog1 body (setq body (cdr body))))))) ((eq keyw :variable) (let nil (setq variable (car-safe (prog1 body (setq body (cdr body))))) (if (not (and (setq tmp (cdr-safe variable)) (or (symbolp tmp) (functionp tmp)))) (progn (setq setter (list 'setf variable)) (setq getter variable)) (setq getter (car variable)) (setq setter (list 'funcall (list 'function (cdr variable))))))) ((eq keyw :after-hook) (let nil (setq after-hook (car-safe (prog1 body (setq body (cdr body))))))) (t (let nil (setq extra-keywords (cons keyw extra-keywords)) (setq extra-keywords (cons (car-safe (prog1 body (setq body (cdr body)))) extra-keywords)))))) (setq pretty-name (easy-mmode-pretty-mode-name mode lighter)) (setq keymap-sym (if (and keymap (symbolp keymap)) keymap (intern (concat mode-name "-map")))) (if set nil (setq set '(:set #'custom-set-minor-mode))) (if initialize nil (setq initialize '(:initialize #'custom-initialize-default))) (if type nil (setq type '(:type 'boolean))) (list 'progn (cond (variable nil) ((not globalp) (list 'progn ':autoload-end (list 'defvar-local mode init-value (concat (format "Non-nil if %s is enabled.\n" pretty-name) (internal--format-docstring-line "Use the command `%s' to change this variable." mode))))) (t (let ((base-doc-string (concat "Non-nil if %s is enabled.\nSee the `%s' command\nfor a description of this minor mode." (if body "\nSetting this variable directly does not take effect;\neither customize it (see the info node `Easy Customization')\nor call the function `%s'.")))) (cons 'defcustom (cons mode (cons init-value (cons (format base-doc-string pretty-name mode mode) (append set initialize type (nreverse extra-keywords))))))))) (funcall warnwrap (list 'defun modefun (cons '&optional (cons 'arg extra-args)) (easy-mmode--mode-docstring doc pretty-name keymap-sym getter globalp) (if interactive (progn (if (consp interactive) (cons 'interactive (cons '(list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 'toggle)) interactive)) '(interactive (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 'toggle)))))) (cons 'let (cons (list (cons last-message '((current-message)))) (cons (append setter (list (cons 'cond (cons (list '(eq arg 'toggle) (list 'not getter)) '(((and (numberp arg) (< arg 1)) nil) (t t)))))) (append (if globalp (list (list 'when '(boundp 'global-minor-modes) (list 'setq 'global-minor-modes (cons 'delq (cons (list 'quote modefun) '(global-minor-modes)))) (list 'when getter (cons 'push (cons (list 'quote modefun) '(global-minor-modes)))))) (list (list 'when '(boundp 'local-minor-modes) (list 'setq 'local-minor-modes (cons 'delq (cons (list 'quote modefun) '(local-minor-modes)))) (list 'when getter (cons 'push (cons (list 'quote modefun) '(local-minor-modes))))))) body (list (list 'run-hooks (list 'quote hook) (list 'if getter (list 'quote hook-on) (list 'quote hook-off))) (list 'if '(called-interactively-p 'any) (list 'progn (if (and globalp (not variable)) (list 'customize-mark-as-set (list 'quote mode))) (list 'unless (list 'and '(current-message) (list 'not (cons 'equal (cons last-message '((current-message)))))) (list 'let (list (list 'local (if globalp "" " in current buffer"))) (cons 'message (cons (format "%s %%sabled%%s" pretty-name) (cons (cons 'if (cons getter '("en" "dis"))) '(local))))))))) (if after-hook (progn (list after-hook))))))) '(force-mode-line-update) getter)) ':autoload-end (cons 'defvar (cons hook '(nil))) (list 'unless (cons 'get (cons (list 'quote hook) '('variable-documentation))) (list 'put (list 'quote hook) ''variable-documentation (format "Hook run after entering or leaving `%s'.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" modefun))) (cons 'put (cons (list 'quote hook) '('custom-type 'hook))) (cons 'put (cons (list 'quote hook) '('standard-value (list nil)))) (if (symbolp keymap) nil (list 'defvar keymap-sym (cons 'let (cons (list (list 'm keymap)) '((cond ((keymapp m) m) ((listp m) (easy-mmode-define-keymap m)) (t (error "Invalid keymap %S" m)))))) (format "Keymap for `%s'." mode-name))) (let ((modevar (if (consp getter) (let* ((x38 (car-safe getter))) (if (eq x38 'default-value) (let* ((x39 (cdr-safe getter))) (if (consp x39) (let* ((x40 (car-safe x39))) (if (consp x40) (let* ((x41 (car-safe x40))) (if (eq x41 'quote) (let* ((x42 (cdr-safe x40))) (if (consp x42) (let* ((x43 (car-safe x42)) (x44 (cdr-safe x42))) (if (null x44) (let* ((x45 (cdr-safe x39))) (if (null x45) (let ((v x43)) v) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter))) (let nil getter)))) (if (not (symbolp modevar)) (if (or lighter keymap) (error ":lighter and :keymap unsupported with mode expression %S" getter)) (list 'with-no-warnings (list 'add-minor-mode (list 'quote modevar) (list 'quote lighter) (if keymap keymap-sym (list 'if (list 'boundp (list 'quote keymap-sym)) keymap-sym)) nil (if (eq mode modefun) nil (list 'quote modefun)))))))))(auto-save-visited-mode "Toggle automatic saving to file-visiting buffers on or off.\n\nUnlike `auto-save-mode', this mode will auto-save buffer contents\nto the visited files directly and will also run all save-related\nhooks.  See Info node `Saving' for details of the save process.\n\nYou can also set the buffer-local value of the variable\n`auto-save-visited-mode' to nil.  A buffer where the buffer-local\nvalue of this variable is nil is ignored for the purpose of\n`auto-save-visited-mode', even if `auto-save-visited-mode' is\nenabled." :group 'auto-save :global t (when auto-save--timer (cancel-timer auto-save--timer)) (setq auto-save--timer (when auto-save-visited-mode (run-with-idle-timer auto-save-visited-interval :repeat #'save-some-buffers :no-prompt (lambda nil (and buffer-file-name auto-save-visited-mode (not (and buffer-auto-save-file-name auto-save-visited-file-name))))))))
  (define-minor-mode auto-save-visited-mode "Toggle automatic saving to file-visiting buffers on or off.\n\nUnlike `auto-save-mode', this mode will auto-save buffer contents\nto the visited files directly and will also run all save-related\nhooks.  See Info node `Saving' for details of the save process.\n\nYou can also set the buffer-local value of the variable\n`auto-save-visited-mode' to nil.  A buffer where the buffer-local\nvalue of this variable is nil is ignored for the purpose of\n`auto-save-visited-mode', even if `auto-save-visited-mode' is\nenabled." :group 'auto-save :global t (when auto-save--timer (cancel-timer auto-save--timer)) (setq auto-save--timer (when auto-save-visited-mode (run-with-idle-timer auto-save-visited-interval :repeat #'save-some-buffers :no-prompt (lambda nil (and buffer-file-name auto-save-visited-mode (not (and buffer-auto-save-file-name auto-save-visited-file-name))))))))
  eval-buffer(#<buffer  *load*> nil "/home/eliz/git/emacs/native-comp/lisp/files.el" nil t)
  (if eval-function (funcall eval-function buffer (if dump-mode file fullname)) (eval-buffer buffer nil (if dump-mode file fullname) nil t))
  (let ((read-symbol-shorthands shorthands)) (if eval-function (funcall eval-function buffer (if dump-mode file fullname)) (eval-buffer buffer nil (if dump-mode file fullname) nil t)))
  (let ((load-true-file-name fullname) (load-file-name fullname) (set-auto-coding-for-load t) (inhibit-file-name-operation nil) shorthands) (with-current-buffer buffer (set-buffer-multibyte t) (let (deactivate-mark) (insert-file-contents fullname)) (setq shorthands (and hack-read-symbol-shorthands-function (funcall hack-read-symbol-shorthands-function))) (if (and enable-multibyte-characters (or (eq (coding-system-type last-coding-system-used) 'raw-text))) (set-buffer-multibyte nil)) (set-buffer-modified-p nil)) (let ((read-symbol-shorthands shorthands)) (if eval-function (funcall eval-function buffer (if dump-mode file fullname)) (eval-buffer buffer nil (if dump-mode file fullname) nil t))))
  (unwind-protect (let ((load-true-file-name fullname) (load-file-name fullname) (set-auto-coding-for-load t) (inhibit-file-name-operation nil) shorthands) (with-current-buffer buffer (set-buffer-multibyte t) (let (deactivate-mark) (insert-file-contents fullname)) (setq shorthands (and hack-read-symbol-shorthands-function (funcall hack-read-symbol-shorthands-function))) (if (and enable-multibyte-characters (or (eq (coding-system-type last-coding-system-used) 'raw-text))) (set-buffer-multibyte nil)) (set-buffer-modified-p nil)) (let ((read-symbol-shorthands shorthands)) (if eval-function (funcall eval-function buffer (if dump-mode file fullname)) (eval-buffer buffer nil (if dump-mode file fullname) nil t)))) (let (kill-buffer-hook kill-buffer-query-functions) (kill-buffer buffer)))
  (let ((buffer (generate-new-buffer " *load*")) (load-in-progress t) (source (string-suffix-p ".el" fullname))) (unless nomessage (if source (message "Loading %s (source)..." file) (message "Loading %s..." file))) (when purify-flag (push (purecopy file) preloaded-file-list)) (unwind-protect (let ((load-true-file-name fullname) (load-file-name fullname) (set-auto-coding-for-load t) (inhibit-file-name-operation nil) shorthands) (with-current-buffer buffer (set-buffer-multibyte t) (let (deactivate-mark) (insert-file-contents fullname)) (setq shorthands (and hack-read-symbol-shorthands-function (funcall hack-read-symbol-shorthands-function))) (if (and enable-multibyte-characters (or (eq (coding-system-type last-coding-system-used) 'raw-text))) (set-buffer-multibyte nil)) (set-buffer-modified-p nil)) (let ((read-symbol-shorthands shorthands)) (if eval-function (funcall eval-function buffer (if dump-mode file fullname)) (eval-buffer buffer nil (if dump-mode file fullname) nil t)))) (let (kill-buffer-hook kill-Symbol's function definition is void: if-let
buffer-query-functions) (kill-buffer buffer))) (do-after-load-evaluation fullname) (unless (or nomessage noninteractive) (if source (message "Loading %s (source)...done" file) (message "Loading %s...done" file))) t)
  (if (null (file-readable-p fullname)) (and (null noerror) (signal 'file-error (list "Cannot open load file" file))) (let ((buffer (generate-new-buffer " *load*")) (load-in-progress t) (source (string-suffix-p ".el" fullname))) (unless nomessage (if source (message "Loading %s (source)..." file) (message "Loading %s..." file))) (when purify-flag (push (purecopy file) preloaded-file-list)) (unwind-protect (let ((load-true-file-name fullname) (load-file-name fullname) (set-auto-coding-for-load t) (inhibit-file-name-operation nil) shorthands) (with-current-buffer buffer (set-buffer-multibyte t) (let (deactivate-mark) (insert-file-contents fullname)) (setq shorthands (and hack-read-symbol-shorthands-function (funcall hack-read-symbol-shorthands-function))) (if (and enable-multibyte-characters (or (eq (coding-system-type last-coding-system-used) 'raw-text))) (set-buffer-multibyte nil)) (set-buffer-modified-p nil)) (let ((read-symbol-shorthands shorthands)) (if eval-function (funcall eval-function buffer (if dump-mode file fullname)) (eval-buffer buffer nil (if dump-mode file fullname) nil t)))) (let (kill-buffer-hook kill-buffer-query-functions) (kill-buffer buffer))) (do-after-load-evaluation fullname) (unless (or nomessage noninteractive) (if source (message "Loading %s (source)...done" file) (message "Loading %s...done" file))) t))
  load-with-code-conversion("/home/eliz/git/emacs/native-comp/lisp/files.el" "/home/eliz/git/emacs/native-comp/lisp/files.el" nil nil)
  load("files")
  load("loadup.el")
Makefile:923: recipe for target 'bootstrap-emacs.pdmp' failed
make[1]: *** [bootstrap-emacs.pdmp] Error 255
make[1]: Leaving directory '/home/eliz/git/emacs/native-comp/src'
Makefile:469: recipe for target 'src' failed
make: *** [src] Error 2

^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#55194: 29.0.50; Current master fails to bootstrap in the native-compilation configuration
  2022-04-30 13:27 bug#55194: 29.0.50; Current master fails to bootstrap in the native-compilation configuration Eli Zaretskii
@ 2022-04-30 14:27 ` Lars Ingebrigtsen
  2022-04-30 14:46   ` Lars Ingebrigtsen
  0 siblings, 1 reply; 3+ messages in thread
From: Lars Ingebrigtsen @ 2022-04-30 14:27 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Stefan Monnier, 55194

Eli Zaretskii <eliz@gnu.org> writes:

> As Subject says: I cannot bootstrap the current master configure with
> native-compilation on GNU/Linux.  The last part of the build before
> the failure is attached; it seems to have something to do with if-let
> called in files.el, although that code is very old, and if-let is an
> autoloaded macro.  Could this have something to do with the latest
> changes regarding oclosure etc.?

No, I think it's just the usual "don't load subr-x during bootstrap"
problem.  I've now rewritten the offending function.

> P.S. Why do we call macros from subr-x, which is not preloaded, in
> files.el, which _is_ preloaded?

I think that's fine, so long as the subr-x isn't loaded during
bootstrap.  If I remember correctly.

However, I think it's high time that we put the if-let family of macros
into subr.  However, that doesn't seem to be trivial -- I tried now and
that broke bootstrap, too.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#55194: 29.0.50; Current master fails to bootstrap in the native-compilation configuration
  2022-04-30 14:27 ` Lars Ingebrigtsen
@ 2022-04-30 14:46   ` Lars Ingebrigtsen
  0 siblings, 0 replies; 3+ messages in thread
From: Lars Ingebrigtsen @ 2022-04-30 14:46 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Stefan Monnier, 55194

Lars Ingebrigtsen <larsi@gnus.org> writes:

> However, I think it's high time that we put the if-let family of macros
> into subr.  However, that doesn't seem to be trivial -- I tried now and
> that broke bootstrap, too.

It was because the internals depended on more stuff from subr-x.el, like
thread-first.  I've now rewritten slightly and moved the macros to
subr.el, so these types of boostrap failures should be history.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-04-30 14:46 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-30 13:27 bug#55194: 29.0.50; Current master fails to bootstrap in the native-compilation configuration Eli Zaretskii
2022-04-30 14:27 ` Lars Ingebrigtsen
2022-04-30 14:46   ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).