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