* minibuffer.el (completion-all-completion-with-base-size): New var.
[bpt/emacs.git] / lisp / loadup.el
CommitLineData
55535639 1;;; loadup.el --- load up standardly loaded Lisp files for Emacs
6594deb0 2
0d30b337 3;; Copyright (C) 1985, 1986, 1992, 1994, 2001, 2002, 2003,
409cc4a3 4;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
eea8d4ef 5
e5167999 6;; Maintainer: FSF
fd7fa35a 7;; Keywords: internal
e5167999 8
0d20f9a0
JB
9;; This file is part of GNU Emacs.
10
11;; GNU Emacs is free software; you can redistribute it and/or modify
12;; it under the terms of the GNU General Public License as published by
b4aa6026 13;; the Free Software Foundation; either version 3, or (at your option)
0d20f9a0
JB
14;; any later version.
15
16;; GNU Emacs is distributed in the hope that it will be useful,
17;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19;; GNU General Public License for more details.
20
21;; You should have received a copy of the GNU General Public License
b578f267 22;; along with GNU Emacs; see the file COPYING. If not, write to the
086add15
LK
23;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24;; Boston, MA 02110-1301, USA.
0d20f9a0 25
eea8d4ef
ER
26;;; Commentary:
27
28;; This is loaded into a bare Emacs to make a dumpable one.
29
e5167999
ER
30;;; Code:
31
ce87039d
SM
32;; add subdirectories to the load-path for files that might
33;; get autoloaded when bootstrapping
34(if (or (equal (nth 3 command-line-args) "bootstrap")
49fc4500 35 (equal (nth 4 command-line-args) "bootstrap")
3579a658
KH
36 (equal (nth 3 command-line-args) "unidata-gen.el")
37 (equal (nth 4 command-line-args) "unidata-gen-files")
49fc4500
KR
38 ;; in case CANNOT_DUMP
39 (equal (nth 0 command-line-args) "../src/bootstrap-emacs"))
ceec5b6d 40 (let ((dir (car load-path)))
397869a4
SM
41 ;; We'll probably overflow the pure space.
42 (setq purify-flag nil)
ceec5b6d
RS
43 (setq load-path (list dir
44 (expand-file-name "emacs-lisp" dir)
45 (expand-file-name "language" dir)
46 (expand-file-name "international" dir)
47 (expand-file-name "textmodes" dir)))))
ce87039d 48
8c74709f 49(message "Using load-path %s" load-path)
8c74709f 50
86db31d5 51;; We don't want to have any undo records in the dumped Emacs.
f6e43712
RS
52(set-buffer "*scratch*")
53(setq buffer-undo-list t)
0d20f9a0 54
693e59d6 55(load "emacs-lisp/byte-run")
86db31d5 56(load "emacs-lisp/backquote")
0d20f9a0 57(load "subr")
15897347
RS
58
59;; We specify .el in case someone compiled version.el by mistake.
60(load "version.el")
61
d038ca1d 62(load "widget")
d038ca1d 63(load "custom")
693e59d6 64(load "emacs-lisp/map-ynp")
4d100a01 65(load "cus-start")
5dcd1261 66(load "international/mule")
5dcd1261 67(load "international/mule-conf.el") ;Don't get confused if someone compiled this by mistake.
911650d2 68(load "env")
8f89dc56 69(load "format")
9b73022f
RS
70(load "bindings")
71(setq load-source-file-function 'load-with-code-conversion)
0d20f9a0 72(load "files")
838d57f6 73
3fad47d8 74(load "cus-face")
d6af189a 75(load "faces") ; after here, `defface' may be used.
beec574c 76(load "minibuffer")
d6af189a 77
d4e9f067
JL
78(load "button")
79(load "startup")
80
6f76277f
RS
81(message "Lists of integers (garbage collection statistics) are normal output")
82(message "while building Emacs; they do not indicate a problem.")
838d57f6 83(message "%s" (garbage-collect))
23c2e0e4
SM
84
85(condition-case nil
86 ;; Don't get confused if someone compiled this by mistake.
87 (load "loaddefs.el")
88 ;; In case loaddefs hasn't been generated yet.
89 (file-error (load "ldefs-boot.el")))
90
838d57f6 91(message "%s" (garbage-collect))
e2947429 92(load "abbrev") ;lisp-mode.el and simple.el use define-abbrev-table.
3bce0243 93(load "simple")
838d57f6 94
301d6830 95(load "help")
d6af189a 96
274925df 97(load "jka-cmpr-hook")
301d6830
GM
98;; Any Emacs Lisp source file (*.el) loaded here after can contain
99;; multilingual text.
100(load "international/mule-cmds")
101(load "case-table")
b0c654c0 102(load "international/characters")
d8b52430 103(load "composite")
90ce1bb9
KH
104;; This file doesn't exist when building Emacs from CVS. It is
105;; generated just after temacs is build.
106(load "international/charprop.el" t)
301d6830 107
8f89dc56 108;; Load language-specific files.
5e14f0f5 109(load "language/chinese")
5e14f0f5 110(load "language/cyrillic")
5e14f0f5 111(load "language/indian")
43d8c495 112(load "language/sinhala")
4366b45e 113(load "language/english")
5e14f0f5 114(load "language/ethiopic")
5e14f0f5 115(load "language/european")
c90c0be0
RS
116(load "language/czech")
117(load "language/slovak")
23e7714e 118(load "language/romanian")
5e14f0f5 119(load "language/greek")
5e14f0f5 120(load "language/hebrew")
5e14f0f5 121(load "language/japanese")
5e14f0f5 122(load "language/korean")
f35c859c 123(load "language/lao")
201bc379 124(load "language/tai-viet")
5e14f0f5 125(load "language/thai")
4366b45e 126(load "language/tibetan")
5e14f0f5 127(load "language/vietnamese")
5e14f0f5 128(load "language/misc-lang")
69c34764
DL
129(load "language/utf-8-lang")
130(load "language/georgian")
44f44190 131(load "language/khmer")
f81e37a0 132(load "language/burmese")
b03e8a93 133(load "language/cham")
86db31d5 134
0d20f9a0
JB
135(load "indent")
136(load "window")
fd727f4a 137(load "frame")
f795f633 138(load "term/tty-colors")
63a29a5d 139(load "font-core")
633537d7
LT
140;; facemenu must be loaded before font-lock, because `facemenu-keymap'
141;; needs to be defined when font-lock is loaded.
a4a19809 142(load "facemenu")
c94f08ff
DN
143(load "emacs-lisp/syntax")
144(load "font-lock")
145(load "jit-lock")
d6af189a 146
7a701b9f
KH
147(if (fboundp 'track-mouse)
148 (progn
7a701b9f 149 (load "mouse")
9315353b 150 (and (boundp 'x-toolkit-scroll-bars)
449ab688 151 (load "scroll-bar"))
36974751 152 (load "select")))
693e59d6 153(load "emacs-lisp/timer")
01c86c56 154(load "isearch")
1f423851 155(load "rfn-eshadow")
838d57f6
RS
156
157(message "%s" (garbage-collect))
afcd9910 158(load "menu-bar")
0d20f9a0 159(load "paths.el") ;Don't get confused if someone compiled paths by mistake.
5dcd1261 160(load "emacs-lisp/lisp")
5dcd1261 161(load "textmodes/page")
0d20f9a0 162(load "register")
5dcd1261 163(load "textmodes/paragraphs")
5dcd1261 164(load "emacs-lisp/lisp-mode")
5dcd1261 165(load "textmodes/text-mode")
5dcd1261 166(load "textmodes/fill")
838d57f6
RS
167(message "%s" (garbage-collect))
168
0d20f9a0
JB
169(load "replace")
170(if (eq system-type 'vax-vms)
171 (progn
0d20f9a0 172 (load "vmsproc")))
0d20f9a0 173(load "buff-menu")
165b0fa0
RS
174
175(if (fboundp 'x-create-frame)
176 (progn
e541cbfc 177 (load "fringe")
165b0fa0
RS
178 (load "image")
179 (load "international/fontset")
180 (load "dnd")
181 (load "mwheel")
182 (load "tool-bar")))
183(if (featurep 'x)
ddaa8057 184 (progn
9d488d86 185 (load "x-dnd")
79c3172f 186 (load "term/x-win")))
ddaa8057 187
165b0fa0
RS
188(message "%s" (garbage-collect))
189
0d20f9a0
JB
190(if (eq system-type 'vax-vms)
191 (progn
0d20f9a0 192 (load "vms-patch")))
b7521474
RS
193(if (eq system-type 'windows-nt)
194 (progn
729f1525 195 (load "w32-vars")
ddaa8057 196 (load "term/w32-win")
b7521474 197 (load "ls-lisp")
234ae99a 198 (load "disp-table") ; needed to setup ibm-pc char set, see internal.el
489f9371 199 (load "dos-w32")
63abf612 200 (load "w32-fns")))
ed10e0ab
RS
201(if (eq system-type 'ms-dos)
202 (progn
203 (load "ls-lisp")
489f9371 204 (load "dos-w32")
ed10e0ab 205 (load "dos-fns")
7298263a 206 (load "dos-vars")
6f676109 207 (load "international/ccl") ; codepage.el uses CCL en/decoder
aea543b4 208 (load "international/codepage") ; internal.el uses cpNNN coding systems
63abf612 209 (load "disp-table"))) ; needed to setup ibm-pc char set, see internal.el
591b63b4
AC
210(if (eq system-type 'macos)
211 (progn
212 (load "ls-lisp")))
88acaaf2 213(if (featurep 'mac-carbon)
80ca7302
DN
214 (progn
215 (load "term/mac-win")))
e04d21aa 216(if (fboundp 'atan) ; preload some constants and
63abf612 217 (progn ; floating pt. functions if we have float support.
693e59d6 218 (load "emacs-lisp/float-sup")))
838d57f6 219(message "%s" (garbage-collect))
e4636528 220
637a8ae9 221(load "vc-hooks")
a63926db 222(load "ediff-hook")
8a902fd2 223(if (fboundp 'x-show-tip) (load "tooltip"))
165b0fa0 224
838d57f6 225(message "%s" (garbage-collect))
0d20f9a0
JB
226
227;If you want additional libraries to be preloaded and their
228;doc strings kept in the DOC file rather than in core,
229;you may load them with a "site-load.el" file.
230;But you must also cause them to be scanned when the DOC file
87855006 231;is generated. For VMS, you must edit ../vms/makedoc.com.
fd322fae 232;For other systems, you must edit ../src/Makefile.in.
0d20f9a0
JB
233(if (load "site-load" t)
234 (garbage-collect))
235
f5263a5c
RS
236(if (fboundp 'x-popup-menu)
237 (precompute-menubar-bindings))
238;; Turn on recording of which commands get rebound,
239;; for the sake of the next call to precompute-menubar-bindings.
240(setq define-key-rebound-commands nil)
241
de78a7ba
RS
242;; Determine which last version number to use
243;; based on the executables that now exist.
24cffc68
RS
244(if (and (or (equal (nth 3 command-line-args) "dump")
245 (equal (nth 4 command-line-args) "dump"))
246 (not (eq system-type 'ms-dos)))
0c39a403 247 (let* ((base (concat "emacs-" emacs-version "."))
de78a7ba
RS
248 (files (file-name-all-completions base default-directory))
249 (versions (mapcar (function (lambda (name)
9b04b1b7 250 (string-to-int (substring name (length base)))))
de78a7ba 251 files)))
86db31d5
SM
252 ;; `emacs-version' is a constant, so we shouldn't change it with `setq'.
253 (defconst emacs-version
254 (format "%s.%d"
255 emacs-version (if versions (1+ (apply 'max versions)) 1)))))
de78a7ba 256
0d20f9a0
JB
257;; Note: all compiled Lisp files loaded above this point
258;; must be among the ones parsed by make-docfile
259;; to construct DOC. Any that are not processed
260;; for DOC will not have doc strings in the dumped Emacs.
261
262(message "Finding pointers to doc strings...")
24cffc68
RS
263(if (or (equal (nth 3 command-line-args) "dump")
264 (equal (nth 4 command-line-args) "dump"))
0d20f9a0
JB
265 (let ((name emacs-version))
266 (while (string-match "[^-+_.a-zA-Z0-9]+" name)
267 (setq name (concat (downcase (substring name 0 (match-beginning 0)))
268 "-"
269 (substring name (match-end 0)))))
b7521474 270 (if (memq system-type '(ms-dos windows-nt))
87485d6f 271 (setq name (expand-file-name
753a134f 272 (if (fboundp 'x-create-frame) "DOC-X" "DOC") "../etc"))
ed10e0ab
RS
273 (setq name (concat (expand-file-name "../etc/DOC-") name))
274 (if (file-exists-p name)
275 (delete-file name))
276 (copy-file (expand-file-name "../etc/DOC") name t))
450a90e2 277 (Snarf-documentation (file-name-nondirectory name)))
ce87039d
SM
278 (condition-case nil
279 (Snarf-documentation "DOC")
280 (error nil)))
0d20f9a0
JB
281(message "Finding pointers to doc strings...done")
282
0f4b266c
KH
283;;;Note: You can cause additional libraries to be preloaded
284;;;by writing a site-init.el that loads them.
285;;;See also "site-load" above.
0d20f9a0 286(load "site-init" t)
95227eb2 287(setq current-load-list nil)
c2509060 288
b7b75652
AS
289;; Write the value of load-history into fns-VERSION.el,
290;; then clear out load-history.
4744f265
SM
291;; (if (or (equal (nth 3 command-line-args) "dump")
292;; (equal (nth 4 command-line-args) "dump"))
293;; (let ((buffer-undo-list t))
294;; (princ "(setq load-history\n" (current-buffer))
295;; (princ " (nconc load-history\n" (current-buffer))
296;; (princ " '(" (current-buffer))
297;; (let ((tem load-history))
298;; (while tem
299;; (prin1 (car tem) (current-buffer))
300;; (terpri (current-buffer))
301;; (if (cdr tem)
302;; (princ " " (current-buffer)))
303;; (setq tem (cdr tem))))
304;; (princ ")))\n" (current-buffer))
305;; (write-region (point-min) (point-max)
306;; (expand-file-name
307;; (cond
308;; ((eq system-type 'ms-dos)
309;; "../lib-src/fns.el")
310;; ((eq system-type 'windows-nt)
311;; (format "../../../lib-src/fns-%s.el" emacs-version))
312;; (t
313;; (format "../lib-src/fns-%s.el" emacs-version)))
314;; invocation-directory))
315;; (erase-buffer)
316;; (setq load-history nil))
317;; (setq symbol-file-load-history-loaded t))
318;; We don't use this fns-*.el file. Instead we keep the data in PURE space.
319;; Make sure that the spine of the list is not in pure space because it can
320;; be destructively mutated in lread.c:build_load_history.
321(setq load-history (mapcar 'purecopy load-history))
322(setq symbol-file-load-history-loaded t)
323
b7b75652 324(set-buffer-modified-p nil)
c2509060 325
ce87039d
SM
326;; reset the load-path. See lread.c:init_lread why.
327(if (or (equal (nth 3 command-line-args) "bootstrap")
328 (equal (nth 4 command-line-args) "bootstrap"))
329 (setcdr load-path nil))
330
5bb65bd4 331(clear-charset-maps)
0d20f9a0
JB
332(garbage-collect)
333
ffd56f97
JB
334;;; At this point, we're ready to resume undo recording for scratch.
335(buffer-enable-undo "*scratch*")
336
6a4803ec
RS
337(if (null (garbage-collect))
338 (setq pure-space-overflow t))
339
ce87039d
SM
340(if (or (member (nth 3 command-line-args) '("dump" "bootstrap"))
341 (member (nth 4 command-line-args) '("dump" "bootstrap")))
0d20f9a0 342 (if (eq system-type 'vax-vms)
e04d21aa 343 (progn
0d20f9a0
JB
344 (message "Dumping data as file temacs.dump")
345 (dump-emacs "temacs.dump" "temacs")
346 (kill-emacs))
347 (let ((name (concat "emacs-" emacs-version)))
348 (while (string-match "[^-+_.a-zA-Z0-9]+" name)
349 (setq name (concat (downcase (substring name 0 (match-beginning 0)))
350 "-"
351 (substring name (match-end 0)))))
0e659f57 352 (if (memq system-type '(ms-dos windows-nt cygwin))
ed10e0ab
RS
353 (message "Dumping under the name emacs")
354 (message "Dumping under names emacs and %s" name)))
0d20f9a0 355 (condition-case ()
59f3e9a2 356 (delete-file "emacs")
0d20f9a0 357 (file-error nil))
59f3e9a2
JB
358 ;; We used to dump under the name xemacs, but that occasionally
359 ;; confused people installing Emacs (they'd install the file
360 ;; under the name `xemacs'), and it's inconsistent with every
0f4b266c 361 ;; other GNU program's build process.
59f3e9a2 362 (dump-emacs "emacs" "temacs")
4d337390 363 (message "%d pure bytes used" pure-bytes-used)
0d20f9a0 364 ;; Recompute NAME now, so that it isn't set when we dump.
6b61353c 365 (if (not (memq system-type '(ms-dos windows-nt cygwin)))
ed10e0ab
RS
366 (let ((name (concat "emacs-" emacs-version)))
367 (while (string-match "[^-+_.a-zA-Z0-9]+" name)
368 (setq name (concat (downcase (substring name 0 (match-beginning 0)))
369 "-"
370 (substring name (match-end 0)))))
371 (add-name-to-file "emacs" name t)))
0d20f9a0
JB
372 (kill-emacs)))
373
374;; Avoid error if user loads some more libraries now.
375(setq purify-flag nil)
376
377;; For machines with CANNOT_DUMP defined in config.h,
378;; this file must be loaded each time Emacs is run.
7fa26c0a 379;; So run the startup code now. First, remove `-l loadup' from args.
0d20f9a0 380
7fa26c0a
KH
381(if (and (equal (nth 1 command-line-args) "-l")
382 (equal (nth 2 command-line-args) "loadup"))
383 (setcdr command-line-args (nthcdr 3 command-line-args)))
384
385(eval top-level)
6594deb0 386
86db31d5 387\f
6e6c6aaf
SM
388;; Local Variables:
389;; no-byte-compile: t
390;; no-update-autoloads: t
391;; End:
6b61353c 392
6e6c6aaf 393;; arch-tag: 121e1dd4-36e1-45ac-860e-239f577a6335
6594deb0 394;;; loadup.el ends here