Renamed lisp/epa-file-hook.el to lisp/epa-hook.el.
[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")
6f8a4190 96(load "epa-file-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
JB
168(load "replace")
169(if (eq system-type 'vax-vms)
170 (progn
0d20f9a0 171 (load "vmsproc")))
0d20f9a0 172(load "buff-menu")
165b0fa0
RS
173
174(if (fboundp 'x-create-frame)
175 (progn
e541cbfc 176 (load "fringe")
165b0fa0
RS
177 (load "image")
178 (load "international/fontset")
179 (load "dnd")
180 (load "mwheel")
181 (load "tool-bar")))
182(if (featurep 'x)
ddaa8057 183 (progn
9d488d86 184 (load "x-dnd")
79c3172f 185 (load "term/x-win")))
ddaa8057 186
165b0fa0
RS
187(message "%s" (garbage-collect))
188
0d20f9a0
JB
189(if (eq system-type 'vax-vms)
190 (progn
0d20f9a0 191 (load "vms-patch")))
b7521474
RS
192(if (eq system-type 'windows-nt)
193 (progn
729f1525 194 (load "w32-vars")
ddaa8057 195 (load "term/w32-win")
b7521474 196 (load "ls-lisp")
234ae99a 197 (load "disp-table") ; needed to setup ibm-pc char set, see internal.el
489f9371 198 (load "dos-w32")
63abf612 199 (load "w32-fns")))
ed10e0ab
RS
200(if (eq system-type 'ms-dos)
201 (progn
202 (load "ls-lisp")
489f9371 203 (load "dos-w32")
ed10e0ab 204 (load "dos-fns")
7298263a 205 (load "dos-vars")
6f676109 206 (load "international/ccl") ; codepage.el uses CCL en/decoder
aea543b4 207 (load "international/codepage") ; internal.el uses cpNNN coding systems
63abf612 208 (load "disp-table"))) ; needed to setup ibm-pc char set, see internal.el
591b63b4
AC
209(if (eq system-type 'macos)
210 (progn
211 (load "ls-lisp")))
88acaaf2 212(if (featurep 'mac-carbon)
80ca7302
DN
213 (progn
214 (load "term/mac-win")))
e04d21aa 215(if (fboundp 'atan) ; preload some constants and
63abf612 216 (progn ; floating pt. functions if we have float support.
693e59d6 217 (load "emacs-lisp/float-sup")))
838d57f6 218(message "%s" (garbage-collect))
e4636528 219
637a8ae9 220(load "vc-hooks")
a63926db 221(load "ediff-hook")
8a902fd2 222(if (fboundp 'x-show-tip) (load "tooltip"))
165b0fa0 223
838d57f6 224(message "%s" (garbage-collect))
0d20f9a0
JB
225
226;If you want additional libraries to be preloaded and their
227;doc strings kept in the DOC file rather than in core,
228;you may load them with a "site-load.el" file.
229;But you must also cause them to be scanned when the DOC file
87855006 230;is generated. For VMS, you must edit ../vms/makedoc.com.
fd322fae 231;For other systems, you must edit ../src/Makefile.in.
0d20f9a0
JB
232(if (load "site-load" t)
233 (garbage-collect))
234
f5263a5c
RS
235(if (fboundp 'x-popup-menu)
236 (precompute-menubar-bindings))
237;; Turn on recording of which commands get rebound,
238;; for the sake of the next call to precompute-menubar-bindings.
239(setq define-key-rebound-commands nil)
240
de78a7ba
RS
241;; Determine which last version number to use
242;; based on the executables that now exist.
24cffc68
RS
243(if (and (or (equal (nth 3 command-line-args) "dump")
244 (equal (nth 4 command-line-args) "dump"))
245 (not (eq system-type 'ms-dos)))
0c39a403 246 (let* ((base (concat "emacs-" emacs-version "."))
de78a7ba
RS
247 (files (file-name-all-completions base default-directory))
248 (versions (mapcar (function (lambda (name)
9b04b1b7 249 (string-to-int (substring name (length base)))))
de78a7ba 250 files)))
86db31d5
SM
251 ;; `emacs-version' is a constant, so we shouldn't change it with `setq'.
252 (defconst emacs-version
253 (format "%s.%d"
254 emacs-version (if versions (1+ (apply 'max versions)) 1)))))
de78a7ba 255
0d20f9a0
JB
256;; Note: all compiled Lisp files loaded above this point
257;; must be among the ones parsed by make-docfile
258;; to construct DOC. Any that are not processed
259;; for DOC will not have doc strings in the dumped Emacs.
260
261(message "Finding pointers to doc strings...")
24cffc68
RS
262(if (or (equal (nth 3 command-line-args) "dump")
263 (equal (nth 4 command-line-args) "dump"))
0d20f9a0
JB
264 (let ((name emacs-version))
265 (while (string-match "[^-+_.a-zA-Z0-9]+" name)
266 (setq name (concat (downcase (substring name 0 (match-beginning 0)))
267 "-"
268 (substring name (match-end 0)))))
b7521474 269 (if (memq system-type '(ms-dos windows-nt))
87485d6f 270 (setq name (expand-file-name
753a134f 271 (if (fboundp 'x-create-frame) "DOC-X" "DOC") "../etc"))
ed10e0ab
RS
272 (setq name (concat (expand-file-name "../etc/DOC-") name))
273 (if (file-exists-p name)
274 (delete-file name))
275 (copy-file (expand-file-name "../etc/DOC") name t))
450a90e2 276 (Snarf-documentation (file-name-nondirectory name)))
ce87039d
SM
277 (condition-case nil
278 (Snarf-documentation "DOC")
279 (error nil)))
0d20f9a0
JB
280(message "Finding pointers to doc strings...done")
281
0f4b266c
KH
282;;;Note: You can cause additional libraries to be preloaded
283;;;by writing a site-init.el that loads them.
284;;;See also "site-load" above.
0d20f9a0 285(load "site-init" t)
95227eb2 286(setq current-load-list nil)
c2509060 287
b7b75652
AS
288;; Write the value of load-history into fns-VERSION.el,
289;; then clear out load-history.
4744f265
SM
290;; (if (or (equal (nth 3 command-line-args) "dump")
291;; (equal (nth 4 command-line-args) "dump"))
292;; (let ((buffer-undo-list t))
293;; (princ "(setq load-history\n" (current-buffer))
294;; (princ " (nconc load-history\n" (current-buffer))
295;; (princ " '(" (current-buffer))
296;; (let ((tem load-history))
297;; (while tem
298;; (prin1 (car tem) (current-buffer))
299;; (terpri (current-buffer))
300;; (if (cdr tem)
301;; (princ " " (current-buffer)))
302;; (setq tem (cdr tem))))
303;; (princ ")))\n" (current-buffer))
304;; (write-region (point-min) (point-max)
305;; (expand-file-name
306;; (cond
307;; ((eq system-type 'ms-dos)
308;; "../lib-src/fns.el")
309;; ((eq system-type 'windows-nt)
310;; (format "../../../lib-src/fns-%s.el" emacs-version))
311;; (t
312;; (format "../lib-src/fns-%s.el" emacs-version)))
313;; invocation-directory))
314;; (erase-buffer)
315;; (setq load-history nil))
316;; (setq symbol-file-load-history-loaded t))
317;; We don't use this fns-*.el file. Instead we keep the data in PURE space.
318;; Make sure that the spine of the list is not in pure space because it can
319;; be destructively mutated in lread.c:build_load_history.
320(setq load-history (mapcar 'purecopy load-history))
321(setq symbol-file-load-history-loaded t)
322
b7b75652 323(set-buffer-modified-p nil)
c2509060 324
ce87039d
SM
325;; reset the load-path. See lread.c:init_lread why.
326(if (or (equal (nth 3 command-line-args) "bootstrap")
327 (equal (nth 4 command-line-args) "bootstrap"))
328 (setcdr load-path nil))
329
5bb65bd4 330(clear-charset-maps)
0d20f9a0
JB
331(garbage-collect)
332
ffd56f97
JB
333;;; At this point, we're ready to resume undo recording for scratch.
334(buffer-enable-undo "*scratch*")
335
6a4803ec
RS
336(if (null (garbage-collect))
337 (setq pure-space-overflow t))
338
ce87039d
SM
339(if (or (member (nth 3 command-line-args) '("dump" "bootstrap"))
340 (member (nth 4 command-line-args) '("dump" "bootstrap")))
0d20f9a0 341 (if (eq system-type 'vax-vms)
e04d21aa 342 (progn
0d20f9a0
JB
343 (message "Dumping data as file temacs.dump")
344 (dump-emacs "temacs.dump" "temacs")
345 (kill-emacs))
346 (let ((name (concat "emacs-" emacs-version)))
347 (while (string-match "[^-+_.a-zA-Z0-9]+" name)
348 (setq name (concat (downcase (substring name 0 (match-beginning 0)))
349 "-"
350 (substring name (match-end 0)))))
0e659f57 351 (if (memq system-type '(ms-dos windows-nt cygwin))
ed10e0ab
RS
352 (message "Dumping under the name emacs")
353 (message "Dumping under names emacs and %s" name)))
0d20f9a0 354 (condition-case ()
59f3e9a2 355 (delete-file "emacs")
0d20f9a0 356 (file-error nil))
59f3e9a2
JB
357 ;; We used to dump under the name xemacs, but that occasionally
358 ;; confused people installing Emacs (they'd install the file
359 ;; under the name `xemacs'), and it's inconsistent with every
0f4b266c 360 ;; other GNU program's build process.
59f3e9a2 361 (dump-emacs "emacs" "temacs")
4d337390 362 (message "%d pure bytes used" pure-bytes-used)
0d20f9a0 363 ;; Recompute NAME now, so that it isn't set when we dump.
6b61353c 364 (if (not (memq system-type '(ms-dos windows-nt cygwin)))
ed10e0ab
RS
365 (let ((name (concat "emacs-" emacs-version)))
366 (while (string-match "[^-+_.a-zA-Z0-9]+" name)
367 (setq name (concat (downcase (substring name 0 (match-beginning 0)))
368 "-"
369 (substring name (match-end 0)))))
370 (add-name-to-file "emacs" name t)))
0d20f9a0
JB
371 (kill-emacs)))
372
373;; Avoid error if user loads some more libraries now.
374(setq purify-flag nil)
375
376;; For machines with CANNOT_DUMP defined in config.h,
377;; this file must be loaded each time Emacs is run.
7fa26c0a 378;; So run the startup code now. First, remove `-l loadup' from args.
0d20f9a0 379
7fa26c0a
KH
380(if (and (equal (nth 1 command-line-args) "-l")
381 (equal (nth 2 command-line-args) "loadup"))
382 (setcdr command-line-args (nthcdr 3 command-line-args)))
383
384(eval top-level)
6594deb0 385
86db31d5 386\f
6e6c6aaf
SM
387;; Local Variables:
388;; no-byte-compile: t
389;; no-update-autoloads: t
390;; End:
6b61353c 391
6e6c6aaf 392;; arch-tag: 121e1dd4-36e1-45ac-860e-239f577a6335
6594deb0 393;;; loadup.el ends here