/usr/share/xemacs-21.4.22/lisp/update-elc-2.el is in xemacs21-support 21.4.22-4ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | ;;; update-elc-2.el --- Recompile remaining .el files, post-dumping
;; Copyright (C) 1997 by Free Software Foundation, Inc.
;; Copyright (C) 2000 Ben Wing.
;; Author: Ben Wing <ben@xemacs.org>, based on cleantree.el by
;; Steven L Baur <steve@xemacs.org>
;; Maintainer: XEmacs Development Team
;; 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, Inc., 59 Temple Place - Suite 330, Boston, MA
;; 02111-1307, USA.
;;; Synched up with: Not in FSF
;;; Commentary:
;; This file should be used after XEmacs has been dumped, to recompile
;; all remaining out-of-date .els and clean up orphaned .elcs. It should
;; be called as
;;
;; xemacs -batch -vanilla -l update-elc-2.el -f batch-update-elc-2 ${dirname}
;;
;; where ${dirname} is the directory tree to recompile, usually `lisp'.
;;
;; Note that this is very different from update-elc.el, which is called
;; BEFORE dumping, handles only the files needed to dump, and is called
;; from temacs instead of xemacs.
;;
;; The original cleantree.el had the comment: This code is derived
;; from Gnus based on a suggestion by David Moore <dmoore@ucsd.edu>
;;; Code:
(defvar update-elc-ignored-dirs
`("." ".." "CVS" "SCCS" "RCS" ,@(unless (featurep 'mule) '("mule"))))
(defvar update-elc-ignored-files
;; note: entries here are regexps
'("^," ;; #### huh?
"^paths\\.el$"
"^loadup\\.el$"
"^loadup-el\\.el$"
"^update-elc\\.el$"
"^update-elc-2\\.el$"
"^dumped-lisp\\.el$"
"^make-docfile\\.el$"
"^site-start\\.el$"
"^site-load\\.el$"
"^site-init\\.el$"
"^version\\.el$"
"^very-early-lisp\\.el$"))
;; SEEN accumulates the list of already-handled dirs.
(defun do-update-elc-2 (dir compile-stage-p seen)
(setq dir (file-name-as-directory dir))
;; Only scan this sub-tree if we haven't been here yet.
(unless (member (file-truename dir) seen)
(push (file-truename dir) seen)
;; Do this directory.
(if compile-stage-p
;; Stage 2: Recompile necessary .els
(let ((files (directory-files dir t "\\.el$"))
file file-c)
(while (setq file (car files))
(setq files (cdr files))
(setq file-c (concat file "c"))
(when (and (file-exists-p file)
(or (not (file-exists-p file-c))
(file-newer-than-file-p file file-c))
(let (ignore)
(mapcar
#'(lambda (regexp)
(if (string-match regexp
(file-name-nondirectory file))
(setq ignore t)))
update-elc-ignored-files)
(not ignore)))
(byte-compile-file file))))
;; Stage 1.
;; Remove out-of-date elcs
(let ((files (directory-files dir t "\\.el$"))
file file-c)
(while (setq file (car files))
(setq files (cdr files))
(setq file-c (concat file "c"))
(when (and (file-exists-p file-c)
(file-newer-than-file-p file file-c))
(message "Removing out-of-date %s" file-c)
(delete-file file-c))))
;; Remove elcs without corresponding el
(let ((files (directory-files dir t "\\.elc$"))
file file-c)
(while (setq file-c (car files))
(setq files (cdr files))
(setq file (replace-in-string file-c "c$" ""))
(when (and (file-exists-p file-c)
(not (file-exists-p file)))
(message "Removing %s; no corresponding .el" file-c)
(delete-file file-c))))
;; We descend recursively
(let ((dirs (directory-files dir t nil t))
dir)
(while (setq dir (pop dirs))
(when (and (not (member (file-name-nondirectory dir)
update-elc-ignored-dirs))
(file-directory-p dir))
(do-update-elc-2 dir compile-stage-p seen))))
)))
(defun batch-update-elc-2 ()
(defvar command-line-args-left)
(unless noninteractive
(error "`batch-update-elc-2' is to be used only with -batch"))
(let ((dir (car command-line-args-left)))
;; We remove all the bad .elcs before any byte-compilation, because
;; there may be dependencies between one .el and another (even across
;; directories), and we don't want to load an out-of-date .elc while
;; byte-compiling a file.
(message "Removing old or spurious .elcs in directory tree `%s'..." dir)
(do-update-elc-2 dir nil nil)
(message "Removing old or spurious .elcs in directory tree `%s'...done"
dir)
(message "Recompiling updated .els in directory tree `%s'..." dir)
(do-update-elc-2 dir t nil)
(message "Recompiling updated .els in directory tree `%s'...done" dir))
(setq command-line-args-left nil))
;;; update-elc-2.el ends here
|