diff lisp/update-elc.el @ 442:abe6d1db359e r21-2-36

Import from CVS: tag r21-2-36
author cvs
date Mon, 13 Aug 2007 11:35:02 +0200
parents 3ecd8885ac67
children 5bdbc721d46a
line wrap: on
line diff
--- a/lisp/update-elc.el	Mon Aug 13 11:33:40 2007 +0200
+++ b/lisp/update-elc.el	Mon Aug 13 11:35:02 2007 +0200
@@ -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)
 
@@ -83,9 +84,14 @@
 
 ;; (print (prin1-to-string update-elc-files-to-compile))
 
-(let (preloaded-file-list site-load-packages)
+(let (preloaded-file-list site-load-packages need-to-dump dumped-exe)
   (load (expand-file-name "../lisp/dumped-lisp.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
 	 (packages-collect-package-dumped-lisps late-package-load-path)))
@@ -93,6 +99,7 @@
     (setq preloaded-file-list
  	  (append package-preloaded-file-list
  		  preloaded-file-list
+		  '("bytecomp")
  		  packages-hardcoded-lisp)))
 
   (load (concat default-directory "../site-packages") t t)
@@ -104,6 +111,26 @@
   (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
@@ -123,7 +150,14 @@
 		     (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))
@@ -139,7 +173,7 @@
 		    update-elc-files-to-compile))
       (load "loadup-el.el"))
   (condition-case nil
-      (delete-file "./NOBYTECOMPILE")
+      (delete-file "../src/NOBYTECOMPILE")
     (file-error nil)))
 
 (kill-emacs)