diff lisp/prim/loadup.el @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children ac2d302a0011
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/prim/loadup.el	Mon Aug 13 08:45:50 2007 +0200
@@ -0,0 +1,394 @@
+;;; loadup.el --- load up standardly loaded Lisp files for XEmacs.
+
+;; It is not a good idea to edit this file.  Use site-init.el or site-load.el
+;; instead.
+;;
+;; Copyright (C) 1985, 1986, 1992, 1993, 1994 Free Software Foundation, Inc.
+;; Copyright (C) 1996 Richard Mlynarik.
+;; Copyright (C) 1995, 1996 Ben Wing.
+
+;; Maintainer: FSF
+;; Keywords: internal
+
+;; This file is part of XEmacs.
+
+;; XEmacs is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; XEmacs is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with XEmacs; see the file COPYING.  If not, write to the Free
+;; Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+;;; Synched up with: FSF 19.30.
+
+;;; Commentary:
+
+;; This is loaded into a bare Emacs to make a dumpable one.
+
+;;; Code:
+
+(if (fboundp 'error)
+    (error "loadup.el already loaded!"))
+
+(define-function 'defalias 'define-function)
+
+(call-with-condition-handler
+      ;; This is awfully damn early to be getting an error, right?
+      'really-early-error-handler
+ #'(lambda ()
+     ; message not defined yet ...
+     (external-debugging-output (format "\nUsing load-path %s" load-path))
+
+     ;; We don't want to have any undo records in the dumped XEmacs.
+     (buffer-disable-undo (get-buffer "*scratch*"))
+
+     ;; lread.c (or src/Makefile.in.in) has prepended "${srcdir}/../lisp/prim"
+     ;; to load-path, which is how this file has been found.  At this point,
+     ;; enough of emacs has been initialized that we can call directory-files
+     ;; and get the rest of the dirs (so that we can dump stuff from modes/
+     ;; and packages/.)
+     ;;
+     (let ((temp-path (expand-file-name ".." (car load-path))))
+       (setq source-directory temp-path)
+       (setq load-path (nconc (directory-files temp-path t "^[^-.]"
+					       nil 'dirs-only)
+			      (cons temp-path load-path))))
+
+     (setq load-warn-when-source-newer t ; set to nil at the end
+	   load-warn-when-source-only t)
+
+     (let ((l #'(lambda (x)
+                  (load x)
+                  ;; garbage collect after loading every file in an attempt to
+                  ;; minimize the size of the dumped image (if we don't do
+                  ;; this, there will be lots of extra space in the data
+                  ;; segment filled with garbage-collected junk)
+                  (garbage-collect))))
+       (funcall l "backquote") ; needed for defsubst etc.
+       (funcall l "bytecomp-runtime")	; define defsubst
+       (funcall l "subr") ;; now load the most basic Lisp functions
+       (funcall l "replace") ;; match-string used in version.el.
+       (funcall l "version.el")	;Ignore compiled-by-mistake version.elc
+       (funcall l "cl")
+       (funcall l "cmdloop")
+       (or (fboundp 'recursive-edit) (funcall l "cmdloop1"))
+       (funcall l "keymap")
+       (funcall l "syntax")
+       (funcall l "device")
+       (funcall l "console")
+       (funcall l "obsolete")
+       (funcall l "specifier")
+       (funcall l "faces")	; must be loaded before any make-face call
+       ;(funcall l "facemenu") #### not yet ported
+       (funcall l "glyphs")
+       (funcall l "objects")
+       (funcall l "extents")
+       (funcall l "events")
+       (funcall l "text-props")
+       (funcall l "process")
+       (funcall l "frame") ; move up here cause some stuff needs it here
+       (funcall l "map-ynp")
+       (funcall l "simple")
+       (funcall l "keydefs")	; Before loaddefs so that keymap vars exist.
+       (funcall l "abbrev")
+       (funcall l "derived")
+       (funcall l "minibuf")
+       (funcall l "list-mode")
+       (funcall l "modeline") ;after simple.el so it can reference functions
+			      ;defined there.
+       ;; If SparcWorks support is included some additional packages are
+       ;; dumped which would normally have autoloads.  To avoid
+       ;; duplicate doc string warnings, SparcWorks uses a separate
+       ;; autoloads file with the dumped packages removed.
+       (if (featurep 'sparcworks)
+           (funcall l "eos/loaddefs-eos")
+           (funcall l "loaddefs"))
+       (funcall l "misc")
+       (funcall l "profile")
+       (funcall l "help")
+       ;; (funcall l "hyper-apropos")  Soon...
+       (funcall l "files")
+       (funcall l "lib-complete")
+       (funcall l "format")
+       (funcall l "indent")
+       (funcall l "isearch-mode")
+       (funcall l "buffer")
+       (funcall l "buff-menu")
+       (funcall l "undo-stack")
+       (funcall l "window")
+       (funcall l "paths.el")		; don't get confused if paths compiled.
+       (funcall l "startup")
+       (funcall l "lisp")
+       (funcall l "page")
+       (funcall l "register")
+       (funcall l "iso8859-1")		; This must be before any modes
+                                        ; (sets standard syntax table.)
+       (funcall l "paragraphs")
+       (funcall l "lisp-mode")
+       (funcall l "text-mode")
+       (funcall l "fill")
+       (funcall l "cc-mode")
+       (if (eq system-type 'vax-vms)
+           (funcall l "vmsproc"))
+       (if (eq system-type 'vax-vms)
+           (funcall l "vms-patch"))
+       (if (eq system-type 'windows-nt)
+	   (progn
+	     (funcall l "ls-lisp")
+	     (funcall l "winnt")))
+       (if (eq system-type 'ms-dos)
+	   (progn
+	     (funcall l "ls-lisp")
+	     (funcall l "dos-fns")
+	     (funcall l "disp-table")	; needed to setup ibm-pc char set,
+					; see internal.el
+	     ))
+       (if (featurep 'lisp-float-type)
+           (funcall l "float-sup"))
+       (funcall l "itimer") ; for vars auto-save-timeout and auto-gc-threshold
+       (if (featurep 'toolbar)
+           (funcall l "toolbar")
+         (progn
+           ;; but still define a few functions.
+           (defun toolbar-button-p (obj) "No toolbar support." nil)
+           (defun toolbar-specifier-p (obj) "No toolbar support." nil)))
+       (if (featurep 'scrollbar)
+           (funcall l "scrollbar"))
+       (if (featurep 'menubar)
+           (funcall l "menubar"))
+       (if (featurep 'dialog)
+           (funcall l "dialog"))
+       (if (featurep 'window-system)
+           (progn
+	     (funcall l "gui")
+             (funcall l "mode-motion")
+             (funcall l "mouse")))
+       (if (featurep 'x)
+           ;; preload the X code, for faster startup.
+           (progn
+             (if (featurep 'menubar)
+                 (progn
+                   (funcall l "x-menubar")
+                   ;; autoload this.
+                   ;;(funcall l "x-font-menu")
+                   ))
+             (funcall l "x-faces")
+             (funcall l "x-iso8859-1")
+             (funcall l "x-mouse")
+             (funcall l "x-select")
+             (if (featurep 'scrollbar)
+                 (funcall l "x-scrollbar"))
+             (funcall l "x-misc")
+             (funcall l "x-init")
+             (if (featurep 'toolbar)
+                 (funcall l "x-toolbar"))
+             ))
+        (if (featurep 'tty)
+            ;; preload the TTY init code.
+            (funcall l "tty-init"))
+       (if (featurep 'tooltalk)
+           (funcall l "tooltalk/tooltalk-load"))
+       (funcall l "vc-hooks")
+       (funcall l "ediff-hook")
+       (funcall l "fontl-hooks")
+       (funcall l "auto-show")
+       (if (featurep 'energize)
+           (funcall l "energize/energize-load.el"))
+       (if (featurep 'sparcworks)
+           (funcall l "sunpro/sunpro-load.el"))
+     ))) ;; end of call-with-condition-handler
+
+
+(setq load-warn-when-source-newer nil ; set to t at top of file
+      load-warn-when-source-only nil)
+
+(setq debugger 'debug)
+
+(if (or (equal (nth 4 command-line-args) "no-site-file")
+	(equal (nth 5 command-line-args) "no-site-file"))
+    (setq site-start-file nil))
+
+;;; 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.
+;;; For other systems, you must edit ../../src/Makefile.in.in.
+(if (load "site-load" t)
+    (garbage-collect))
+
+;FSFmacs randomness
+;(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)
+
+;;FSFmacs #### what?
+;; Determine which last version number to use
+;; based on the executables that now exist.
+;(if (and (or (equal (nth 3 command-line-args) "dump")
+;	      (equal (nth 4 command-line-args) "dump"))
+;	  (not (eq system-type 'ms-dos)))
+;    (let* ((base (concat "emacs-" emacs-version "."))
+;	    (files (file-name-all-completions base default-directory))
+;	    (versions (mapcar (function (lambda (name)
+;					  (string-to-int (substring name (length base)))))
+;			      files)))
+;      (setq emacs-version (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 XEmacs.
+
+;;; Don't bother with these if we're running temacs, i.e. if we're
+;;; just debugging don't waste time finding doc strings.
+
+(if (or (equal (nth 3 command-line-args) "dump")
+	(equal (nth 4 command-line-args) "dump"))
+    (progn
+      (message "Finding pointers to doc strings...")
+      (if (fboundp 'dump-emacs)
+	  (let ((name emacs-version))
+ 	    (string-match " Lucid" name)
+ 	    (setq name (concat (substring name 0 (match-beginning 0))
+ 			       (substring name (match-end 0))))
+	    (while (string-match "[^-+_.a-zA-Z0-9]+" name)
+	      (setq name (concat
+			  (downcase (substring name 0 (match-beginning 0)))
+			  "-"
+			  (substring name (match-end 0)))))
+	    (if (string-match "-+\\'" name)
+		(setq name (substring name 0 (match-beginning 0))))
+	    (if (memq system-type '(ms-dos windows-nt))
+		(setq name (expand-file-name
+			    (if (fboundp 'make-frame) "DOC-X" "DOC") "../etc"))
+	      (setq name (concat (expand-file-name "DOC-" "../lib-src") name))
+	      (if (file-exists-p name)
+		  (delete-file name))
+	      (copy-file (expand-file-name "DOC" "../lib-src") name t))
+	    (Snarf-documentation (file-name-nondirectory name)))
+	(Snarf-documentation "DOC"))
+      (message "Finding pointers to doc strings...done")
+      (Verify-documentation)
+      ))
+
+;;; Note: You can cause additional libraries to be preloaded
+;;; by writing a site-init.el that loads them.
+;;; See also "site-load" above.
+(if (stringp site-start-file)
+    (load "site-init" t))
+(setq current-load-list nil)
+(garbage-collect)
+
+;;; At this point, we're ready to resume undo recording for scratch.
+(buffer-enable-undo "*scratch*")
+
+(if (or (equal (nth 3 command-line-args) "dump")
+	(equal (nth 4 command-line-args) "dump"))
+    (if (eq system-type 'vax-vms)
+	(progn 
+	  (setq command-line-args nil)
+	  (message "Dumping data as file temacs.dump")
+	  (dump-emacs "temacs.dump" "temacs")
+	  (kill-emacs))
+      (let ((name (concat "emacs-" emacs-version)))
+ 	(string-match " Lucid" name)
+ 	(setq name (concat (substring name 0 (match-beginning 0))
+ 			   (substring name (match-end 0))))
+	(while (string-match "[^-+_.a-zA-Z0-9]+" name)
+	  (setq name (concat (downcase (substring name 0 (match-beginning 0)))
+			     "-"
+			     (substring name (match-end 0)))))
+	(if (string-match "-+\\'" name)
+	    (setq name (substring name 0 (match-beginning 0))))
+	(if (eq system-type 'ms-dos)
+	    (message "Dumping under the name xemacs")
+	  (message "Dumping under names xemacs and %s" name)))
+      (condition-case ()
+	  (delete-file "xemacs")
+	(file-error nil))
+      (if (fboundp 'really-free)
+	  (really-free))
+      ;; Note that FSF used to dump under `xemacs'!
+      (dump-emacs "xemacs" "temacs")
+      ;This is done automatically.
+      ;(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)))
+	  (let ((name (concat "emacs-" emacs-version)))
+	    (string-match " Lucid" name)
+	    (setq name (concat (substring name 0 (match-beginning 0))
+			       (substring name (match-end 0))))
+	    (while (string-match "[^-+_.a-zA-Z0-9]+" name)
+	      (setq name (concat (downcase (substring name 0 
+						      (match-beginning 0)))
+				 "-"
+				 (substring name (match-end 0)))))
+	    (if (string-match "-+\\'" name)
+		(setq name (substring name 0 (match-beginning 0))))
+	    (add-name-to-file "xemacs" name t)))
+      (kill-emacs)))
+
+(if (or (equal (nth 3 command-line-args) "run-temacs")
+	(equal (nth 4 command-line-args) "run-temacs"))
+    (progn
+      ;; purify-flag is nil if called from loadup-el.el.
+      (if purify-flag
+	  (progn
+	    (message "\nSnarfing doc...")
+	    (Snarf-documentation "DOC")
+	    (Verify-documentation)))
+      (message "\nBootstrapping from temacs...")
+      (setq purify-flag nil)
+      (apply #'run-emacs-from-temacs
+	     (nthcdr (if (equal (nth 3 command-line-args) "run-temacs")
+			 4 5)
+		     command-line-args))
+      ;; run-emacs-from-temacs doesn't actually return anyway.
+      (kill-emacs)))
+
+;;; Avoid error if user loads some more libraries now.
+(setq purify-flag nil)
+
+;;; If you are using 'recompile', then you should have used -l loadup-el.el
+;;; so that the .el files always get loaded (the .elc files may be out-of-
+;;; date or bad).
+(if (or (equal (nth 3 command-line-args) "recompile")
+	(equal (nth 4 command-line-args) "recompile"))
+    (progn
+      (let ((command-line-args-left
+	     (nthcdr (if (equal (nth 3 command-line-args) "recompile")
+			 4 5)
+		     command-line-args)))
+	(batch-byte-recompile-directory)
+	(kill-emacs))))
+
+
+;;; For machines with CANNOT_DUMP defined in config.h,
+;;; this file must be loaded each time XEmacs is run.
+;;; So run the startup code now.
+
+;; 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.
+
+(or (fboundp 'dump-emacs)
+    (progn
+      ;; Avoid loading loadup.el a second time!
+      (setq command-line-args (cdr (cdr command-line-args)))
+      (eval top-level)))
+
+;;; loadup.el ends here