X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fupdate-elc.el;h=777017a3c40067b86b84d8cb690ba2a9c806bc93;hb=99325cfbfc7b69601c6d34463651eaf86938686e;hp=8a4527aecf131bcea328cb9d5224a2c74cac9f36;hpb=113b194be934327de99a168d809271db252c07c4;p=chise%2Fxemacs-chise.git diff --git a/lisp/update-elc.el b/lisp/update-elc.el index 8a4527a..777017a 100644 --- a/lisp/update-elc.el +++ b/lisp/update-elc.el @@ -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 , Steven L Baur ;; 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)