Merge r21-4-11-chise-0_20-=ucs.
[chise/xemacs-chise.git.1] / lisp / update-elc.el
index 45b5e1d..9dcc274 100644 (file)
@@ -1,8 +1,9 @@
 ;;; update-elc.el --- Bytecompile out-of-date dumped files
 
 ;; Copyright (C) 1997 Free Software Foundation, Inc.
-;; Copyright (C) 1996 Unknown
+;; Copyright (C) 1996 Sun Microsystems, Inc.
 
+;; Author: Ben Wing <ben@xemacs.org>, Steven L Baur <steve@xemacs.org>
 ;; Maintainer: XEmacs Development Team
 ;; Keywords: internal
 
@@ -39,8 +40,7 @@
 ;; (the idea here is that you can bootstrap if your .ELC files
 ;; are missing or badly out-of-date)
 
-;; Currently this code gets the list of files to check passed to it from
-;; src/Makefile.  This must be fixed.  -slb
+;; See also update-elc-2.el
 
 ;;; Code:
 
@@ -62,7 +62,8 @@
 ;                  ;; -batch gets filtered out.
 ;                  (nthcdr 3 command-line-args))))
 
-(setq load-path (split-path (getenv "EMACSBOOTSTRAPLOADPATH")))
+(let ((build-root (expand-file-name ".." invocation-directory)))
+  (setq load-path (list (expand-file-name "lisp" build-root))))
 
 (load "very-early-lisp" nil t)
 
@@ -71,7 +72,7 @@
 (load "setup-paths.el")
 (load "dump-paths.el")
 
-(let ((autol (packages-list-autoloads)))
+(let ((autol (packages-list-autoloads (concat default-directory "../lisp"))))
   ;; (print (prin1-to-string autol))
   (while autol
     (let ((src (car autol)))
 
 ;; (print (prin1-to-string update-elc-files-to-compile))
 
-(let (preloaded-file-list site-load-packages)
-  (load (concat default-directory "../lisp/dumped-lisp.el"))
+(let (preloaded-file-list site-load-packages need-to-dump dumped-exe)
+  (load (expand-file-name "../lisp/dumped-lisp.el"))
+
+  (when (featurep 'utf-2000)
+    (load (expand-file-name "../lisp/utf-2000/dumped-chars.el")))
+
+  (setq dumped-exe
+       (cond ((file-exists-p "../src/xemacs.exe") "../src/xemacs.exe")
+             ((file-exists-p "../src/xemacs") "../src/xemacs")
+             (t nil)))
 
   ;; Path setup
   (let ((package-preloaded-file-list
     (setq preloaded-file-list
          (append package-preloaded-file-list
                  preloaded-file-list
+                 '("bytecomp")
                  packages-hardcoded-lisp)))
 
   (load (concat default-directory "../site-packages") t t)
   (setq preloaded-file-list
        (append packages-hardcoded-lisp
                preloaded-file-list
+               (if (featurep 'utf-2000)
+                   system-char-db-source-file-list)
                packages-useful-lisp
                site-load-packages))
   (while preloaded-file-list
     (let ((arg (car preloaded-file-list)))
       ;; (print (prin1-to-string arg))
+
+      ;; now check if .el or .elc is newer than the dumped exe.
+      ;; if so, need to redump.
+      (let ((frob
+            (if (string-match "\\.elc?\\'" arg)
+                (substring arg 0 (match-beginning 0))
+              arg)))
+           (when (and dumped-exe
+                      (or (and (file-exists-p
+                                (concat "../lisp/" frob ".el"))
+                               (file-newer-than-file-p
+                                (concat "../lisp/" frob ".el")
+                                dumped-exe))
+                          (and (file-exists-p
+                                (concat "../lisp/" frob ".elc"))
+                               (file-newer-than-file-p
+                                (concat "../lisp/" frob ".elc")
+                                dumped-exe))))
+             (setq need-to-dump t)))
+
       (if (null (member (file-name-nondirectory arg)
                        packages-unbytecompiled-lisp))
          (progn
                     (file-newer-than-file-p (concat arg ".el")
                                             (concat arg ".elc")))
                (setq processed (cons (concat arg ".el") processed)))))
-      (setq preloaded-file-list (cdr preloaded-file-list)))))
+      (setq preloaded-file-list (cdr preloaded-file-list))))
+
+  (if need-to-dump
+      (condition-case nil
+         (write-region-internal "foo" nil "../src/NEEDTODUMP")
+       (file-error nil)))
+
+  )
 
 (setq update-elc-files-to-compile (append update-elc-files-to-compile
-                                         processed))
+                                         (nreverse processed)))
 
 ;; (print (prin1-to-string update-elc-files-to-compile))
 
                    update-elc-files-to-compile))
       (load "loadup-el.el"))
   (condition-case nil
-      (delete-file "./NOBYTECOMPILE")
+      (delete-file "../src/NOBYTECOMPILE")
     (file-error nil)))
 
 (kill-emacs)