]> git.eshelyaron.com Git - emacs.git/commitdiff
Replace ldefs-boot with a much smaller file
authorPhillip Lord <phillip.lord@russet.org.uk>
Thu, 27 Oct 2016 07:07:05 +0000 (08:07 +0100)
committerPhillip Lord <phillip.lord@russet.org.uk>
Tue, 13 Dec 2016 22:15:32 +0000 (22:15 +0000)
 * Makefile.in (bootstrap-build,generate-ldefs-boot): New targets.
   (bootstrap): Depend on bootstrap-build.
 * admin/ldefs-clean.el: New file.
 * lisp/Makefile.in (compile-first): Depend on loaddefs.el
 * lisp/ldefs-boot.el: Remove.
 * lisp/ldefs-boot-auto.el: New file.
 * lisp/ldefs-boot-manual.el: New file.
 * lisp/loadup.el: Load ldefs-boot-manual.el.
 * src/emacs.c (generating_ldefs_boot): New variable.
   (main): Check whether we are generating ldefs.
 * src/eval.c (autoload-do-load): Dump autoload forms to stderr when
   requested.
 * src/lisp.h (generating_ldefs_boot): New variable.
 * admin/gitmerge.el, admin/make-tarball.txt, admin/notes/copyright,
   lisp/Makefile.in, lisp/cus-dep.el, lisp/emacs-lisp/elint.el,
   lisp/finder.el, lisp/loadup.el, msdos/mainmake.v2: Update reference to
   ldefs-boot.
 * admin/update_autogen: Alter mechanism for ldefs-boot generation.

18 files changed:
Makefile.in
admin/gitmerge.el
admin/ldefs-clean.el [new file with mode: 0644]
admin/make-tarball.txt
admin/notes/copyright
admin/update_autogen
lisp/Makefile.in
lisp/cus-dep.el
lisp/emacs-lisp/elint.el
lisp/finder.el
lisp/ldefs-boot-auto.el [new file with mode: 0644]
lisp/ldefs-boot-manual.el [new file with mode: 0644]
lisp/loadup.el
msdos/mainmake.v2
src/Makefile.in
src/emacs.c
src/eval.c
src/lisp.h

index 2fead76c1cebd483027aea9cb9521f4db2a8c8f0..d7e30a8206a87065e064423274dcd608443b92bd 100644 (file)
@@ -1117,7 +1117,9 @@ check-info: info
 #  * Run autogen.sh.
 #  * Rebuild Makefile, to update the build procedure itself.
 #  * Do the actual build.
-bootstrap: bootstrap-clean
+bootstrap: | bootstrap-clean bootstrap-build
+
+bootstrap-build:
        cd $(srcdir) && ./autogen.sh
        $(MAKE) MAKEFILE_NAME=force-Makefile force-Makefile
        $(MAKE) all
@@ -1180,3 +1182,18 @@ check-declare:
          exit 1; \
        fi
        $(MAKE) -C lisp $@
+
+## Generating ldefs-boot-auto.el requires a completely clean build so
+## that we can see which autoloads are actually called.  The build has
+## to complete because we use Emacs to clean the results up!  We use
+## loaddefs.el in place of ldefs-boot-auto, because if we are running
+## this there is the possibility that ldefs-boot-auto is not
+## sufficient for bootstrap.
+generate-ldefs-boot: all
+       echo "Generating Bootstrap ldefs"
+       cp lisp/loaddefs.el lisp/ldefs-boot-auto.el
+       $(MAKE) -j 1 bootstrap \
+       GENERATE_LDEFS_BOOT="generate-ldefs-boot" \
+       2>&1 | tee lisp/ldefs-boot-auto.temp
+       $(EMACS) -batch --load admin/ldefs-clean.el --funcall ldefs-clean
+       rm lisp/ldefs-boot-auto.temp
index d2cb1e8df03442ebb800e931d2cb784cdfdfc34b..ca2886370a177df1be919e711dfcdb9d5ed3f975 100644 (file)
@@ -292,7 +292,7 @@ Returns non-nil if conflicts remain."
             ))
           ;; Try to resolve the conflicts.
           (cond
-           ((member file '("configure" "lisp/ldefs-boot.el"
+           ((member file '("configure" "lisp/ldefs-boot-auto.el"
                            "lisp/emacs-lisp/cl-loaddefs.el"))
             ;; We are in the file's buffer, so names are relative.
             (call-process "git" nil t nil "checkout" "--"
diff --git a/admin/ldefs-clean.el b/admin/ldefs-clean.el
new file mode 100644 (file)
index 0000000..89c77a7
--- /dev/null
@@ -0,0 +1,63 @@
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file takes the output from the "generate-ldefs-boot" make
+;; target, takes the relevant autoload forms, removes everything else
+;; and adds some comments.
+
+(defun ldefs-clean-uniquify-region-lines (beg end)
+  "Remove duplicate adjacent lines in region."
+  (save-excursion
+    (goto-char beg)
+    (while (re-search-forward "^\\(.*\n\\)\\1+" end t)
+      (replace-match "\\1"))))
+
+(defun ldefs-clean-uniquify-buffer-lines ()
+  "Remove duplicate adjacent lines in the current buffer."
+  (interactive)
+  (ldefs-clean-uniquify-region-lines (point-min) (point-max)))
+
+(defun ldefs-clean-up ()
+  "Clean up output from build and turn it into ldefs-boot-auto.el."
+  (interactive)
+  (goto-char (point-max))
+  ;; We only need the autoloads up till loaddefs.el is
+  ;; generated. After this, ldefs-boot.el is not needed
+  (search-backward "  GEN      loaddefs.el")
+  (delete-region (point) (point-max))
+  (keep-lines "(autoload" (point-min) (point-max))
+  (sort-lines nil (point-min) (point-max))
+  (ldefs-clean-uniquify-buffer-lines)
+  (goto-char (point-min))
+  (insert
+   ";; This file is autogenerated by admin/ldefs-clean.el
+;; Do not edit
+")
+  (goto-char (point-max))
+  (insert
+   ";; Local Variables:
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; End:"))
+
+
+(defun ldefs-clean ()
+  (find-file "lisp/ldefs-boot-auto.temp")
+  (ldefs-clean-up)
+  (write-file "ldefs-boot-auto.el"))
index 77486cc6399c5647a6010c99b62623e0e34925e7..369d169cb9ad86cd7f6c96994af450c0d07cb23c 100644 (file)
@@ -84,9 +84,7 @@ General steps (for each step, check for possible errors):
      make -C etc/refcards
      make -C etc/refcards clean
 
-5.  Copy lisp/loaddefs.el to lisp/ldefs-boot.el.
-
-    Commit ChangeLog.N, etc/AUTHORS, lisp/ldefs-boot.el, and the
+5.  Commit ChangeLog.N, etc/AUTHORS, lisp/ldefs-boot.el, and the
     files changed by M-x set-version.
 
     If someone else made a commit between step 1 and now,
index 2dc33c164a9b41b3488a94ce8662aba219edf6fd..6cfc331914c226d23d25b6a313630b84c70a5b21 100644 (file)
@@ -45,9 +45,9 @@ available.
 
 The definition of triviality is a little vague, but a rule of thumb is
 that any file with less than 15 lines of actual content is trivial. If
-a file is auto-generated (eg ldefs-boot.el) from another one in the
-repository, then it does not really matter about adding a copyright
-statement to the generated file.
+a file is auto-generated from another one in the repository, then it
+does not really matter about adding a copyright statement to the
+generated file.
 
 Legal advice says that we could, if we wished, put a license notice
 even in trivial files, because copyright law in general looks at the
index f27bfe0d1482efbbb61472b80c6e63293c2ba8fb..98be4ed8fe01e99ed097f578146a8b56d92c60de 100755 (executable)
@@ -92,7 +92,7 @@ changelog_flag=
 
 ## Parameters.
 ldefs_in=lisp/loaddefs.el
-ldefs_out=lisp/ldefs-boot.el
+ldefs_boot=lisp/ldefs-boot.el
 changelog_n=$(sed -n 's/CHANGELOG_HISTORY_INDEX_MAX *= *//p' Makefile.in)
 changelog_files="ChangeLog.$changelog_n"
 sources="configure.ac lib/Makefile.am"
@@ -370,19 +370,12 @@ echo "Running lisp/ make..."
 
 make -C lisp "$@" autoloads EMACS=../src/bootstrap-emacs || die "make src error"
 
-
-## Ignore comment differences.
-[ ! "$lboot_flag" ] || \
-    diff -q -I '^;' $ldefs_in $ldefs_out || \
-    cp $ldefs_in $ldefs_out || die "cp ldefs_boot error"
-
-
 echo "Checking status of loaddef files..."
 
 ## It probably would be fine to just check+commit lisp/, since
 ## making autoloads should not effect any other files.  But better
 ## safe than sorry.
-modified=$(status $genfiles $ldefs_out) || die
+modified=$(status $genfiles) || die
 
 
 commit "loaddefs" $modified || die "commit error"
@@ -396,6 +389,14 @@ commit "loaddefs" $modified || die "commit error"
 }
 
 
+
+## Regenerate ldefs-boot if we are told to
+[ ! "$lboot_flag" ] || {
+   make generate-ldefs-boot || die
+   modified=$(status $ldefs_boot) || die
+   commit $ldefs_boot $modified || die "commit error"
+}
+
 exit 0
 
 ### update_autogen ends here
index 12bb9c7a3ceccaf930798f808defb3dc72dd1d9b..34f2b2c8cfc86c0c5adad0dcadc03a848865d140 100644 (file)
@@ -230,7 +230,7 @@ FORCE:
 
 tagsfiles = $(shell find ${srcdir} -name '*.el')
 tagsfiles := $(filter-out ${srcdir}/%loaddefs.el,${tagsfiles})
-tagsfiles := $(filter-out ${srcdir}/ldefs-boot.el,${tagsfiles})
+tagsfiles := $(filter-out ${srcdir}/ldefs-boot%.el,${tagsfiles})
 tagsfiles := $(filter-out ${srcdir}/eshell/esh-groups.el,${tagsfiles})
 
 ETAGS = ../lib-src/etags${EXEEXT}
@@ -283,7 +283,7 @@ $(THEFILE)c:
 
 .PHONY: compile-first compile-main compile compile-always
 
-compile-first: $(COMPILE_FIRST)
+compile-first: loaddefs.el $(COMPILE_FIRST)
 
 # In 'compile-main' we could directly do
 #    ... | xargs $(MAKE)
@@ -450,7 +450,7 @@ check-declare:
 check-defun-dups:
        sed -n -e '/^(defun /s/\(.\)(.*/\1/p' \
          $$(find . -name '*.el' -print | \
-         grep -Ev '(loaddefs|ldefs-boot)\.el') | sort | uniq -d
+         grep -Ev '(loaddefs|ldefs-boot*)\.el') | sort | uniq -d
 
 # Dependencies
 
index b31c60f98ebeebe0d24ea21046e0b9f28a7ad448..90da4a8aa0eb90f1e73d9b806d524b8b26506530 100644 (file)
@@ -33,7 +33,7 @@
 
 ;; See finder-no-scan-regexp in finder.el.
 (defvar custom-dependencies-no-scan-regexp "\\(^\\.#\\|\\(loaddefs\\|\
-ldefs-boot\\|cus-load\\|finder-inf\\|esh-groups\\|subdirs\\)\\.el$\\)"
+ldefs-boot.*\\|cus-load\\|finder-inf\\|esh-groups\\|subdirs\\)\\.el$\\)"
   "Regexp matching file names not to scan for `custom-make-dependencies'.")
 
 (require 'autoload)
index 7f0f947ec04ef625072ce673a036574842fd3e82..ab0a54c540e0c3b798233663d00c6f01ca76a573 100644 (file)
@@ -105,7 +105,7 @@ are as follows, and suppress messages about the indicated features:
   :version "23.2"
   :group 'elint)
 
-(defcustom elint-directory-skip-re "\\(ldefs-boot\\|loaddefs\\)\\.el\\'"
+(defcustom elint-directory-skip-re "\\(ldefs-boot.*\\|loaddefs\\)\\.el\\'"
   "If nil, a regexp matching files to skip when linting a directory."
   :type '(choice (const :tag "Lint all files" nil)
                 (regexp :tag "Regexp to skip"))
index da537a59cc1276dcd322ab7db6be14c167d2c61c..e6d666a5173c36f39830b1619c9e2ae220428f9f 100644 (file)
@@ -130,8 +130,8 @@ Keywords and package names both should be symbols.")
 ;; useful, and because in parallel builds of Emacs they may get
 ;; modified while we are trying to read them.
 ;; http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-01/msg00469.html
-;; ldefs-boot is not auto-generated, but has nothing useful.
-(defvar finder-no-scan-regexp "\\(^\\.#\\|\\(loaddefs\\|ldefs-boot\\|\
+;; ldefs-boot-* are not auto-generated during build, but has nothing useful.
+(defvar finder-no-scan-regexp "\\(^\\.#\\|\\(loaddefs\\|ldefs-boot-.*\\|\
 cus-load\\|finder-inf\\|esh-groups\\|subdirs\\|leim-list\\)\\.el$\\)"
   "Regexp matching file names not to scan for keywords.")
 
diff --git a/lisp/ldefs-boot-auto.el b/lisp/ldefs-boot-auto.el
new file mode 100644 (file)
index 0000000..914fec8
--- /dev/null
@@ -0,0 +1,125 @@
+;; This file is autogenerated by admin/ldefs-clean.el
+;; Do not edit
+(autoload 'Info-directory "info" nil nil nil)
+(autoload 'Info-index "info" nil nil nil)
+(autoload 'View-exit-and-edit "view" nil nil nil)
+(autoload 'add-change-log-entry "add-log" nil nil nil)
+(autoload 'add-log-current-defun "add-log" nil nil nil)
+(autoload 'batch-byte-compile "bytecomp" nil nil nil)
+(autoload 'browse-url "browse-url" nil nil nil)
+(autoload 'buffer-face-mode "face-remap" nil nil nil)
+(autoload 'byte-compile "bytecomp" nil nil nil)
+(autoload 'byte-compile-disable-warning "bytecomp" nil nil nil)
+(autoload 'byte-compile-enable-warning "bytecomp" nil nil nil)
+(autoload 'byte-compile-file "bytecomp" nil nil nil)
+(autoload 'byte-compile-inline-expand "byte-opt" nil nil nil)
+(autoload 'byte-compile-unfold-lambda "byte-opt" nil nil nil)
+(autoload 'byte-optimize-form "byte-opt" nil nil nil)
+(autoload 'byte-optimize-lapcode "byte-opt" nil nil nil)
+(autoload 'byte-recompile-directory "bytecomp" nil nil nil)
+(autoload 'char-displayable-p "mule-util" nil nil nil)
+(autoload 'color-name-to-rgb "color" nil nil nil)
+(autoload 'comint-redirect-results-list-from-process "comint" nil nil nil)
+(autoload 'comint-redirect-send-command-to-process "comint" nil nil nil)
+(autoload 'compilation-mode "compile" nil nil nil)
+(autoload 'compilation-shell-minor-mode "compile" nil nil nil)
+(autoload 'compilation-start "compile" nil nil nil)
+(autoload 'create-image "image" nil nil nil)
+(autoload 'custom-save-all "cus-edit" nil nil nil)
+(autoload 'customize-face "cus-edit" nil nil nil)
+(autoload 'customize-group "cus-edit" nil nil nil)
+(autoload 'customize-option "cus-edit" nil nil nil)
+(autoload 'customize-set-variable "cus-edit" nil nil nil)
+(autoload 'debug "debug" nil nil nil)
+(autoload 'define-ccl-program "ccl" nil nil t)
+(autoload 'define-derived-mode "derived" nil nil t)
+(autoload 'define-minor-mode "easy-mmode" nil nil t)
+(autoload 'delete-extract-rectangle "rect" nil nil nil)
+(autoload 'describe-char "descr-text" nil nil nil)
+(autoload 'describe-function "help-fns" nil nil nil)
+(autoload 'describe-function-1 "help-fns" nil nil nil)
+(autoload 'describe-package "package" nil nil nil)
+(autoload 'describe-variable "help-fns" nil nil nil)
+(autoload 'desktop-save "desktop" nil nil nil)
+(autoload 'diff-mode "diff-mode" nil nil nil)
+(autoload 'dired "dired" nil nil nil)
+(autoload 'dired-mode "dired" nil nil nil)
+(autoload 'dired-noselect "dired" nil nil nil)
+(autoload 'display-call-tree "bytecomp" nil nil nil)
+(autoload 'display-warning "warnings" nil nil nil)
+(autoload 'easy-menu-create-menu "easymenu" nil nil nil)
+(autoload 'ediff-patch-file "ediff" nil nil nil)
+(autoload 'edit-kbd-macro "edmacro" nil nil nil)
+(autoload 'extract-rectangle "rect" nil nil nil)
+(autoload 'find-definition-noselect "find-func" nil nil nil)
+(autoload 'find-function-search-for-symbol "find-func" nil nil nil)
+(autoload 'find-lisp-object-file-name "help-fns" nil nil nil)
+(autoload 'find-variable-noselect "find-func" nil nil nil)
+(autoload 'format-kbd-macro "edmacro" nil nil nil)
+(autoload 'goto-address-mode "goto-addr" nil nil nil)
+(autoload 'grep-compute-defaults "grep" nil nil nil)
+(autoload 'help-C-file-name "help-fns" nil nil nil)
+(autoload 'help-buffer "help-mode" nil nil nil)
+(autoload 'help-insert-xref-button "help-mode" nil nil nil)
+(autoload 'help-make-xrefs "help-mode" nil nil nil)
+(autoload 'help-mode "help-mode" nil nil nil)
+(autoload 'help-setup-xref "help-mode" nil nil nil)
+(autoload 'help-with-tutorial "tutorial" nil nil nil)
+(autoload 'help-xref-button "help-mode" nil nil nil)
+(autoload 'hi-lock-face-buffer "hi-lock" nil nil nil)
+(autoload 'image-type-available-p "image" nil nil nil)
+(autoload 'info "info" nil nil nil)
+(autoload 'info-emacs-manual "info" nil nil nil)
+(autoload 'insert-image "image" nil nil nil)
+(autoload 'insert-rectangle "rect" nil nil nil)
+(autoload 'isearch-process-search-multibyte-characters "isearch-x" nil nil nil)
+(autoload 'jka-compr-uninstall "jka-compr" nil nil nil)
+(autoload 'log-edit "log-edit" nil nil nil)
+(autoload 'log-view-mode "log-view" nil nil nil)
+(autoload 'lookup-nested-alist "mule-util" nil nil nil)
+(autoload 'make-display-table "disp-table" nil nil nil)
+(autoload 'make-glyph-code "disp-table" nil nil nil)
+(autoload 'multi-isearch-buffers "misearch" nil nil nil)
+(autoload 'multi-isearch-buffers-regexp "misearch" nil nil nil)
+(autoload 'multi-isearch-files "misearch" nil nil nil)
+(autoload 'multi-isearch-files-regexp "misearch" nil nil nil)
+(autoload 'open-network-stream "network-stream" nil nil nil)
+(autoload 'package-initialize "package" nil nil nil)
+(autoload 'parse-time-string "parse-time" nil nil nil)
+(autoload 'pp "pp" nil nil nil)
+(autoload 'pp-buffer "pp" nil nil nil)
+(autoload 'read-kbd-macro "edmacro" nil nil nil)
+(autoload 'regexp-opt "regexp-opt" nil nil nil)
+(autoload 'rx "rx" nil nil t)
+(autoload 'seconds-to-string "time-date" nil nil nil)
+(autoload 'seconds-to-time "time-date" nil nil nil)
+(autoload 'server-start "server" nil nil nil)
+(autoload 'set-nested-alist "mule-util" nil nil nil)
+(autoload 'smerge-mode "smerge-mode" nil nil nil)
+(autoload 'smerge-start-session "smerge-mode" nil nil nil)
+(autoload 'standard-display-8bit "disp-table" nil nil nil)
+(autoload 'tags-query-replace "etags" nil nil nil)
+(autoload 'tags-search "etags" nil nil nil)
+(autoload 'text-scale-increase "face-remap" nil nil nil)
+(autoload 'thing-at-point "thingatpt" nil nil nil)
+(autoload 'time-to-days "time-date" nil nil nil)
+(autoload 'timezone-make-date-arpa-standard "timezone" nil nil nil)
+(autoload 'tmm-menubar "tmm" nil nil nil)
+(autoload 'truncate-string-to-width "mule-util" nil nil nil)
+(autoload 'url-handler-mode "url-handlers" nil nil nil)
+(autoload 'variable-at-point "help-fns" nil nil nil)
+(autoload 'vc-register "vc" nil nil nil)
+(autoload 'vc-responsible-backend "vc" nil nil nil)
+(autoload 'vc-transfer-file "vc" nil nil nil)
+(autoload 'view-buffer "view" nil nil nil)
+(autoload 'view-buffer-other-window "view" nil nil nil)
+(autoload 'view-file "view" nil nil nil)
+(autoload 'view-mode-enter "view" nil nil nil)
+(autoload 'visit-tags-table "etags" nil nil nil)
+(autoload 'warn "warnings" nil nil nil)
+(autoload 'wdired-change-to-wdired-mode "wdired" nil nil nil)
+(autoload 'widget-value "wid-edit" nil nil nil)
+;; Local Variables:
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; End:
diff --git a/lisp/ldefs-boot-manual.el b/lisp/ldefs-boot-manual.el
new file mode 100644 (file)
index 0000000..183703d
--- /dev/null
@@ -0,0 +1,19 @@
+;; These appear to be necessary as they are used elsewhere in macro definitions.
+(load "emacs-lisp/gv.el")
+(load "emacs-lisp/nadvice.el")
+(load "emacs-lisp/inline.el")
+
+;; This variable is used by bytecomp.el
+(defvar warning-series nil)
+
+;; This variable is used by emacs-lisp-mode which is used heavily
+;; during the byte-compile phase
+(defvar electric-pair-text-pairs '((34 . 34)))
+
+
+(load "ldefs-boot-auto.el")
+
+;; Local Variables:
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; End:
index 5c16464282b6b5dc188bc1ad4e6997d89783b8ea..e9dd683b283e301583fae86513ed0f63e825f3cd 100644 (file)
 (load "button")
 
 ;; We don't want to store loaddefs.el in the repository because it is
-;; a generated file; but it is required in order to compile the lisp files.
-;; When bootstrapping, we cannot generate loaddefs.el until an
-;; emacs binary has been built.  We therefore compromise and keep
-;; ldefs-boot.el in the repository.  This does not need to be updated
-;; as often as the real loaddefs.el would.  Bootstrap should always
-;; work with ldefs-boot.el.  Therefore, Whenever a new autoload cookie
-;; gets added that is necessary during bootstrapping, ldefs-boot.el
-;; should be updated by overwriting it with an up-to-date copy of
-;; loaddefs.el that is uncorrupted by local changes.
-;; autogen/update_autogen can be used to periodically update ldefs-boot.
+;; a generated file; but it is required in order to compile the lisp
+;; files.  When bootstrapping, we cannot generate loaddefs.el until an
+;; emacs binary has been built.  We therefore support the build with
+;; two files, ldefs-boot-manual.el and ldefs-boot-auto.el, which
+;; contain the autoloads that are actually called during bootstrap.
+;; These do not need to be updated as often as the real loaddefs.el
+;; would.  Bootstrap should always work with ldefs-boot-manual.el.
+;; Therefore, Whenever a new autoload cookie gets added that is
+;; necessary during bootstrapping, ldefs-boot-auto.el should be
+;; updated using the "generate-ldefs-boot" make target.
+;; autogen/update_autogen can be used to periodically update
+;; ldefs-boot.
 (condition-case nil (load "loaddefs.el")
   ;; In case loaddefs hasn't been generated yet.
-  (file-error (load "ldefs-boot.el")))
+  (file-error (load "ldefs-boot-manual.el")))
 
 (let ((new (make-hash-table :test 'equal)))
   ;; Now that loaddefs has populated definition-prefixes, purify its contents.
index 98716ac5a34935725b24d9efc6ec8f657b6257c3..f89caf928f6d684d61896bfb41ae3e5e15921264 100644 (file)
@@ -156,7 +156,7 @@ TAGS tags:  lib-src FRC
        cd lib-src
        if exist etags.exe mv -f etags.exe ../bin
        cd ..
-       - find $(CURDIR)/lisp -iname "*.el" -a -! -( -iname "*loaddefs.el" -o -iname "ldefs-boot.el" -) | ./bin/etags -o lisp/TAGS -
+       - find $(CURDIR)/lisp -iname "*.el" -a -! -( -iname "*loaddefs.el" -o -iname "ldefs-boot-auto.el" -) | ./bin/etags -o lisp/TAGS -
        cd $(CURDIR)
        cd src
        ../bin/etags --include=../lisp/TAGS \
index ffc741d48d3973c4c313f45da42a0f3e86394a54..9703768e98c9aa15ef883f3e3bfba4ff84595dec 100644 (file)
@@ -764,6 +764,10 @@ endif
        @: Compile some files earlier to speed up further compilation.
        $(MAKE) -C ../lisp compile-first EMACS="$(bootstrap_exe)"
 
+
+generate-ldefs-boot: bootstrap-emacs$(EXEEXT)
+       $(RUN_TEMACS) --batch $(BUILD_DETAILS) --load loadup bootstrap
+
 ifeq ($(AUTO_DEPEND),yes)
 -include $(ALLOBJS:%.o=${DEPDIR}/%.d)
 else
index 424ee05a42c2d1e4e203d96109796811885fdcfe..dc13b15ca7b593bc8e149273f35a3b60c07ffa92 100644 (file)
@@ -130,6 +130,8 @@ Lisp_Object Vlibrary_cache;
    on subsequent starts.  */
 bool initialized;
 
+bool generating_ldefs_boot;
+
 #ifndef CANNOT_DUMP
 /* Set to true if this instance of Emacs might dump.  */
 # ifndef DOUG_LEA_MALLOC
@@ -685,7 +687,10 @@ main (int argc, char **argv)
   stack_bottom = &stack_bottom_variable;
 
   dumping = !initialized && (strcmp (argv[argc - 1], "dump") == 0
-                            || strcmp (argv[argc - 1], "bootstrap") == 0);
+                            || strcmp (argv[argc - 1], "bootstrap") == 0 );
+
+  generating_ldefs_boot = getenv ("GENERATE_LDEFS_BOOT");
+
 
   /* True if address randomization interferes with memory allocation.  */
 # ifdef __PPC64__
index 0b257e2d9a08ab7c6bddf24d4a35f4a2325047c1..1d39730339387bf7d2d15485bfecc0d76f3491fe 100644 (file)
@@ -1968,6 +1968,28 @@ it defines a macro.  */)
   if (!CONSP (fundef) || !EQ (Qautoload, XCAR (fundef)))
     return fundef;
 
+  /* In the special case that we are generating ldefs-boot-auto.el,
+     then be noisy about the autoload. */
+  if( generating_ldefs_boot )
+    {
+      fprintf(stderr, "(autoload '");
+      Fprin1(funname,Qexternal_debugging_output);
+      fprintf(stderr, " ");
+      Fprin1(Fcar (Fcdr (fundef)),Qexternal_debugging_output);
+      fprintf(stderr, " nil nil ");
+
+      Lisp_Object kind = Fnth (make_number (4), fundef);
+      if (! (EQ (kind, Qt) || EQ (kind, Qmacro)))
+        {
+          fprintf(stderr, "nil");
+        }
+      else
+        {
+          fprintf(stderr, "t");
+        }
+      fprintf(stderr, ")\n");
+    }
+
   if (EQ (macro_only, Qmacro))
     {
       Lisp_Object kind = Fnth (make_number (4), fundef);
index 5b77dc8b7fd95db779a631704331e7cd96f0e451..66e9bd564122b41ac6e94cc2dc8314e4e1943705 100644 (file)
@@ -619,6 +619,8 @@ extern bool might_dump;
    Used during startup to detect startup of dumped Emacs.  */
 extern bool initialized;
 
+extern bool generating_ldefs_boot;
+
 /* Defined in floatfns.c.  */
 extern double extract_float (Lisp_Object);