X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/3f715d17fef56ee78a3df7ebb00d4e8b1aec37de..0fb1193d6c3923cb3b2033e75f81a769ff2860f2:/lisp/loadup.el diff --git a/lisp/loadup.el b/lisp/loadup.el index 805f82c09f..b087aa7904 100644 --- a/lisp/loadup.el +++ b/lisp/loadup.el @@ -1,7 +1,7 @@ ;;; loadup.el --- load up standardly loaded Lisp files for Emacs -;; Copyright (C) 1985, 1986, 1992, 1994, 2001, 2002, 2003, -;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 1985, 1986, 1992, 1994, 2001, 2002, 2003, 2004, 2005, +;; 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: internal @@ -25,16 +25,36 @@ ;; This is loaded into a bare Emacs to make a dumpable one. +;; If you add/remove Lisp files to be loaded here, consider the +;; following issues: + +;; i) Any file loaded on all platforms should appear in $lisp +;; and $shortlisp in src/Makefile.in. Use the .el or .elc version as +;; appropriate. + +;; ii) Any file that is only loaded on some platforms should appear +;; in the version of $lisp in the generated Makefile on that platform. +;; At the present time, this is achieved by use of #ifdefs. +;; It should also appear in $SOME_MACHINE_LISP on all platforms. + +;; The above steps ensure both that the Lisp files are compiled (if +;; necessary) before the emacs executable is dumped, and that they are +;; passed to make-docfile. (Any that are not processed for DOC will +;; not have doc strings in the dumped Emacs.) Because of this: + +;; iii) If the file is loaded uncompiled, it should (where possible) +;; obey the doc-string conventions expected by make-docfile. + ;;; Code: -;; add subdirectories to the load-path for files that might -;; get autoloaded when bootstrapping +;; Add subdirectories to the load-path for files that might get +;; autoloaded when bootstrapping. (if (or (equal (nth 3 command-line-args) "bootstrap") (equal (nth 4 command-line-args) "bootstrap") (equal (nth 3 command-line-args) "unidata-gen.el") (equal (nth 4 command-line-args) "unidata-gen-files") - ;; in case CANNOT_DUMP - (equal (nth 0 command-line-args) "../src/bootstrap-emacs")) + ;; In case CANNOT_DUMP. + (string-match "src/bootstrap-emacs" (nth 0 command-line-args))) (let ((dir (car load-path))) ;; We'll probably overflow the pure space. (setq purify-flag nil) @@ -44,8 +64,18 @@ (expand-file-name "international" dir) (expand-file-name "textmodes" dir))))) +(if (eq t purify-flag) + ;; Hash consing saved around 11% of pure space in my tests. + (setq purify-flag (make-hash-table :test 'equal))) + (message "Using load-path %s" load-path) +(if (or (member (nth 3 command-line-args) '("dump" "bootstrap")) + (member (nth 4 command-line-args) '("dump" "bootstrap"))) + ;; To reduce the size of dumped Emacs, we avoid making huge + ;; char-tables. + (setq inhibit-load-charset-map t)) + ;; We don't want to have any undo records in the dumped Emacs. (set-buffer "*scratch*") (setq buffer-undo-list t) @@ -54,6 +84,10 @@ (load "emacs-lisp/backquote") (load "subr") +;; Do it after subr, since both after-load-functions and add-hook are +;; implemented in subr.el. +(add-hook 'after-load-functions '(lambda (f) (garbage-collect))) + ;; We specify .el in case someone compiled version.el by mistake. (load "version.el") @@ -62,7 +96,7 @@ (load "emacs-lisp/map-ynp") (load "cus-start") (load "international/mule") -(load "international/mule-conf.el") ;Don't get confused if someone compiled this by mistake. +(load "international/mule-conf") (load "env") (load "format") (load "bindings") @@ -76,17 +110,12 @@ (load "button") (load "startup") -(message "Lists of integers (garbage collection statistics) are normal output") -(message "while building Emacs; they do not indicate a problem.") -(message "%s" (garbage-collect)) - (condition-case nil ;; Don't get confused if someone compiled this by mistake. (load "loaddefs.el") ;; In case loaddefs hasn't been generated yet. (file-error (load "ldefs-boot.el"))) -(message "%s" (garbage-collect)) (load "abbrev") ;lisp-mode.el and simple.el use define-abbrev-table. (load "simple") @@ -100,8 +129,8 @@ (load "case-table") (load "international/characters") (load "composite") -;; This file doesn't exist when building Emacs from CVS. It is -;; generated just after temacs is build. +;; This file doesn't exist when building a development version of Emacs +;; from the repository. It is generated just after temacs is built. (load "international/charprop.el" t) ;; Load language-specific files. @@ -153,7 +182,6 @@ (load "isearch") (load "rfn-eshadow") -(message "%s" (garbage-collect)) (load "menu-bar") (load "paths.el") ;Don't get confused if someone compiled paths by mistake. (load "emacs-lisp/lisp") @@ -163,12 +191,8 @@ (load "emacs-lisp/lisp-mode") (load "textmodes/text-mode") (load "textmodes/fill") -(message "%s" (garbage-collect)) (load "replace") -(if (eq system-type 'vax-vms) - (progn - (load "vmsproc"))) (load "buff-menu") (if (fboundp 'x-create-frame) @@ -177,66 +201,59 @@ (load "image") (load "international/fontset") (load "dnd") - (load "mwheel") (load "tool-bar"))) + +(if (featurep 'dynamic-setting) + (load "dynamic-setting")) + (if (featurep 'x) (progn (load "x-dnd") + (load "term/common-win") (load "term/x-win"))) - -(message "%s" (garbage-collect)) -(if (eq system-type 'vax-vms) - (progn - (load "vms-patch"))) (if (eq system-type 'windows-nt) (progn (load "w32-vars") + (load "term/common-win") (load "term/w32-win") (load "ls-lisp") - (load "disp-table") ; needed to setup ibm-pc char set, see internal.el + (load "disp-table") (load "dos-w32") (load "w32-fns"))) (if (eq system-type 'ms-dos) (progn - (load "ls-lisp") (load "dos-w32") (load "dos-fns") (load "dos-vars") - (load "international/ccl") ; codepage.el uses CCL en/decoder - (load "international/codepage") ; internal.el uses cpNNN coding systems + ;; Don't load term/common-win: it isn't appropriate for the `pc' + ;; ``window system'', which generally behaves like a terminal. + (load "term/pc-win") + (load "ls-lisp") (load "disp-table"))) ; needed to setup ibm-pc char set, see internal.el -(if (eq system-type 'macos) - (progn - (load "ls-lisp"))) -(if (featurep 'mac-carbon) +(if (featurep 'ns) (progn - (load "term/mac-win"))) + (load "emacs-lisp/easymenu") ;; for platform-related menu adjustments + (load "term/ns-win"))) +(if (fboundp 'x-create-frame) + ;; Do it after loading term/foo-win.el since the value of the + ;; mouse-wheel-*-event vars depends on those files being loaded or not. + (load "mwheel")) (if (fboundp 'atan) ; preload some constants and (progn ; floating pt. functions if we have float support. (load "emacs-lisp/float-sup"))) -(message "%s" (garbage-collect)) (load "vc-hooks") (load "ediff-hook") (if (fboundp 'x-show-tip) (load "tooltip")) -(message "%s" (garbage-collect)) - ;If you want additional libraries to be preloaded and their ;doc strings kept in the DOC file rather than in core, ;you may load them with a "site-load.el" file. ;But you must also cause them to be scanned when the DOC file -;is generated. For VMS, you must edit ../vms/makedoc.com. +;is generated. ;For other systems, you must edit ../src/Makefile.in. -(if (load "site-load" t) - (garbage-collect)) - -(if (fboundp 'x-popup-menu) - (precompute-menubar-bindings)) -;; Turn on recording of which commands get rebound, -;; for the sake of the next call to precompute-menubar-bindings. -(setq define-key-rebound-commands nil) +(load "site-load" t) ;; Determine which last version number to use ;; based on the executables that now exist. @@ -253,10 +270,6 @@ (format "%s.%d" emacs-version (if versions (1+ (apply 'max versions)) 1))))) -;; Note: all compiled Lisp files loaded above this point -;; must be among the ones parsed by make-docfile -;; to construct DOC. Any that are not processed -;; for DOC will not have doc strings in the dumped Emacs. (message "Finding pointers to doc strings...") (if (or (equal (nth 3 command-line-args) "dump") @@ -327,30 +340,28 @@ (equal (nth 4 command-line-args) "bootstrap")) (setcdr load-path nil)) +(remove-hook 'after-load-functions '(lambda (f) (garbage-collect))) + +(setq inhibit-load-charset-map nil) (clear-charset-maps) (garbage-collect) -;;; At this point, we're ready to resume undo recording for scratch. +;; At this point, we're ready to resume undo recording for scratch. (buffer-enable-undo "*scratch*") +;; Avoid error if user loads some more libraries now and make sure the +;; hash-consing hash table is GC'd. +(setq purify-flag nil) + (if (null (garbage-collect)) (setq pure-space-overflow t)) (if (or (member (nth 3 command-line-args) '("dump" "bootstrap")) (member (nth 4 command-line-args) '("dump" "bootstrap"))) - (if (eq system-type 'vax-vms) - (progn - (message "Dumping data as file temacs.dump") - (dump-emacs "temacs.dump" "temacs") - (kill-emacs)) - (let ((name (concat "emacs-" emacs-version))) - (while (string-match "[^-+_.a-zA-Z0-9]+" name) - (setq name (concat (downcase (substring name 0 (match-beginning 0))) - "-" - (substring name (match-end 0))))) - (if (memq system-type '(ms-dos windows-nt cygwin)) - (message "Dumping under the name emacs") - (message "Dumping under names emacs and %s" name))) + (progn + (if (memq system-type '(ms-dos windows-nt cygwin)) + (message "Dumping under the name emacs") + (message "Dumping under the name emacs")) (condition-case () (delete-file "emacs") (file-error nil)) @@ -361,18 +372,20 @@ (dump-emacs "emacs" "temacs") (message "%d pure bytes used" pure-bytes-used) ;; Recompute NAME now, so that it isn't set when we dump. - (if (not (memq system-type '(ms-dos windows-nt cygwin))) + (if (not (or (memq system-type '(ms-dos windows-nt cygwin)) + ;; Don't bother adding another name if we're just + ;; building bootstrap-emacs. + (equal (nth 3 command-line-args) "bootstrap") + (equal (nth 4 command-line-args) "bootstrap"))) (let ((name (concat "emacs-" emacs-version))) (while (string-match "[^-+_.a-zA-Z0-9]+" name) (setq name (concat (downcase (substring name 0 (match-beginning 0))) "-" (substring name (match-end 0))))) + (message "Adding name %s" name) (add-name-to-file "emacs" name t))) (kill-emacs))) -;; Avoid error if user loads some more libraries now. -(setq purify-flag nil) - ;; For machines with CANNOT_DUMP defined in config.h, ;; this file must be loaded each time Emacs is run. ;; So run the startup code now. First, remove `-l loadup' from args.