merging Emacs.app (NeXTstep port)
[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
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")))
edfda783
AR
215(if (featurep 'ns-windowing)
216 (progn
217 (load "emacs-lisp/easymenu") ;; for platform-related menu adjustments
218 (load "emacs-lisp/easy-mmode")
219 (load "term/ns-win")))
e04d21aa 220(if (fboundp 'atan) ; preload some constants and
63abf612 221 (progn ; floating pt. functions if we have float support.
693e59d6 222 (load "emacs-lisp/float-sup")))
838d57f6 223(message "%s" (garbage-collect))
e4636528 224
637a8ae9 225(load "vc-hooks")
a63926db 226(load "ediff-hook")
8a902fd2 227(if (fboundp 'x-show-tip) (load "tooltip"))
165b0fa0 228
838d57f6 229(message "%s" (garbage-collect))
0d20f9a0
JB
230
231;If you want additional libraries to be preloaded and their
232;doc strings kept in the DOC file rather than in core,
233;you may load them with a "site-load.el" file.
234;But you must also cause them to be scanned when the DOC file
87855006 235;is generated. For VMS, you must edit ../vms/makedoc.com.
fd322fae 236;For other systems, you must edit ../src/Makefile.in.
0d20f9a0
JB
237(if (load "site-load" t)
238 (garbage-collect))
239
f5263a5c
RS
240(if (fboundp 'x-popup-menu)
241 (precompute-menubar-bindings))
242;; Turn on recording of which commands get rebound,
243;; for the sake of the next call to precompute-menubar-bindings.
244(setq define-key-rebound-commands nil)
245
de78a7ba
RS
246;; Determine which last version number to use
247;; based on the executables that now exist.
24cffc68
RS
248(if (and (or (equal (nth 3 command-line-args) "dump")
249 (equal (nth 4 command-line-args) "dump"))
250 (not (eq system-type 'ms-dos)))
0c39a403 251 (let* ((base (concat "emacs-" emacs-version "."))
de78a7ba
RS
252 (files (file-name-all-completions base default-directory))
253 (versions (mapcar (function (lambda (name)
9b04b1b7 254 (string-to-int (substring name (length base)))))
de78a7ba 255 files)))
86db31d5
SM
256 ;; `emacs-version' is a constant, so we shouldn't change it with `setq'.
257 (defconst emacs-version
258 (format "%s.%d"
259 emacs-version (if versions (1+ (apply 'max versions)) 1)))))
de78a7ba 260
0d20f9a0
JB
261;; Note: all compiled Lisp files loaded above this point
262;; must be among the ones parsed by make-docfile
263;; to construct DOC. Any that are not processed
264;; for DOC will not have doc strings in the dumped Emacs.
265
266(message "Finding pointers to doc strings...")
24cffc68
RS
267(if (or (equal (nth 3 command-line-args) "dump")
268 (equal (nth 4 command-line-args) "dump"))
0d20f9a0
JB
269 (let ((name emacs-version))
270 (while (string-match "[^-+_.a-zA-Z0-9]+" name)
271 (setq name (concat (downcase (substring name 0 (match-beginning 0)))
272 "-"
273 (substring name (match-end 0)))))
b7521474 274 (if (memq system-type '(ms-dos windows-nt))
87485d6f 275 (setq name (expand-file-name
753a134f 276 (if (fboundp 'x-create-frame) "DOC-X" "DOC") "../etc"))
ed10e0ab
RS
277 (setq name (concat (expand-file-name "../etc/DOC-") name))
278 (if (file-exists-p name)
279 (delete-file name))
280 (copy-file (expand-file-name "../etc/DOC") name t))
450a90e2 281 (Snarf-documentation (file-name-nondirectory name)))
ce87039d
SM
282 (condition-case nil
283 (Snarf-documentation "DOC")
284 (error nil)))
0d20f9a0
JB
285(message "Finding pointers to doc strings...done")
286
0f4b266c
KH
287;;;Note: You can cause additional libraries to be preloaded
288;;;by writing a site-init.el that loads them.
289;;;See also "site-load" above.
0d20f9a0 290(load "site-init" t)
95227eb2 291(setq current-load-list nil)
c2509060 292
b7b75652
AS
293;; Write the value of load-history into fns-VERSION.el,
294;; then clear out load-history.
4744f265
SM
295;; (if (or (equal (nth 3 command-line-args) "dump")
296;; (equal (nth 4 command-line-args) "dump"))
297;; (let ((buffer-undo-list t))
298;; (princ "(setq load-history\n" (current-buffer))
299;; (princ " (nconc load-history\n" (current-buffer))
300;; (princ " '(" (current-buffer))
301;; (let ((tem load-history))
302;; (while tem
303;; (prin1 (car tem) (current-buffer))
304;; (terpri (current-buffer))
305;; (if (cdr tem)
306;; (princ " " (current-buffer)))
307;; (setq tem (cdr tem))))
308;; (princ ")))\n" (current-buffer))
309;; (write-region (point-min) (point-max)
310;; (expand-file-name
311;; (cond
312;; ((eq system-type 'ms-dos)
313;; "../lib-src/fns.el")
314;; ((eq system-type 'windows-nt)
315;; (format "../../../lib-src/fns-%s.el" emacs-version))
316;; (t
317;; (format "../lib-src/fns-%s.el" emacs-version)))
318;; invocation-directory))
319;; (erase-buffer)
320;; (setq load-history nil))
321;; (setq symbol-file-load-history-loaded t))
322;; We don't use this fns-*.el file. Instead we keep the data in PURE space.
323;; Make sure that the spine of the list is not in pure space because it can
324;; be destructively mutated in lread.c:build_load_history.
325(setq load-history (mapcar 'purecopy load-history))
326(setq symbol-file-load-history-loaded t)
327
b7b75652 328(set-buffer-modified-p nil)
c2509060 329
ce87039d
SM
330;; reset the load-path. See lread.c:init_lread why.
331(if (or (equal (nth 3 command-line-args) "bootstrap")
332 (equal (nth 4 command-line-args) "bootstrap"))
333 (setcdr load-path nil))
334
5bb65bd4 335(clear-charset-maps)
0d20f9a0
JB
336(garbage-collect)
337
ffd56f97
JB
338;;; At this point, we're ready to resume undo recording for scratch.
339(buffer-enable-undo "*scratch*")
340
6a4803ec
RS
341(if (null (garbage-collect))
342 (setq pure-space-overflow t))
343
ce87039d
SM
344(if (or (member (nth 3 command-line-args) '("dump" "bootstrap"))
345 (member (nth 4 command-line-args) '("dump" "bootstrap")))
0d20f9a0 346 (if (eq system-type 'vax-vms)
e04d21aa 347 (progn
0d20f9a0
JB
348 (message "Dumping data as file temacs.dump")
349 (dump-emacs "temacs.dump" "temacs")
350 (kill-emacs))
fc46d219
SM
351 (if (memq system-type '(ms-dos windows-nt cygwin))
352 (message "Dumping under the name emacs")
353 (message "Dumping under the name emacs"))
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.
fc46d219
SM
364 (if (not (or (memq system-type '(ms-dos windows-nt cygwin))
365 ;; Don't bother adding another name if we're just
366 ;; building bootstrap-emacs.
367 (equal (nth 3 command-line-args) "bootstrap")
368 (equal (nth 4 command-line-args) "bootstrap")))
ed10e0ab
RS
369 (let ((name (concat "emacs-" emacs-version)))
370 (while (string-match "[^-+_.a-zA-Z0-9]+" name)
371 (setq name (concat (downcase (substring name 0 (match-beginning 0)))
372 "-"
373 (substring name (match-end 0)))))
fc46d219 374 (message "Adding name %s" name)
ed10e0ab 375 (add-name-to-file "emacs" name t)))
0d20f9a0
JB
376 (kill-emacs)))
377
378;; Avoid error if user loads some more libraries now.
379(setq purify-flag nil)
380
381;; For machines with CANNOT_DUMP defined in config.h,
382;; this file must be loaded each time Emacs is run.
7fa26c0a 383;; So run the startup code now. First, remove `-l loadup' from args.
0d20f9a0 384
7fa26c0a
KH
385(if (and (equal (nth 1 command-line-args) "-l")
386 (equal (nth 2 command-line-args) "loadup"))
387 (setcdr command-line-args (nthcdr 3 command-line-args)))
388
389(eval top-level)
6594deb0 390
86db31d5 391\f
6e6c6aaf
SM
392;; Local Variables:
393;; no-byte-compile: t
394;; no-update-autoloads: t
395;; End:
6b61353c 396
6e6c6aaf 397;; arch-tag: 121e1dd4-36e1-45ac-860e-239f577a6335
6594deb0 398;;; loadup.el ends here