Mercurial > hg > xemacs-beta
annotate lisp/update-elc.el @ 5679:a81a739181dc
Add command remapping, a more robust alternative to #'substitute-key-definition
src/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* keymap.c:
Add command remapping, a more robust equivalent to
#'substitute-key-definition.
* keymap.c (CHECK_REMAPPING_POSITION): New.
* keymap.c (keymap_equal): Correct a comment here.
* keymap.c (Fdefine_key): Document the command remapping syntax.
* keymap.c (Fremap_command): New.
* keymap.c (command_remapping): New.
* keymap.c (Fcommand_remapping): New.
* keymap.c (commands_remapped_to_mapper): New.
* keymap.c (commands_remapped_to_traverser): New.
* keymap.c (Fcommands_remapped_to): New.
* keymap.c (get_relevant_keymaps): Take a new POSITION argument.
* keymap.c (Fcurrent_keymaps, event_binding):
Supply the new POSITION argument to get_relevant_keymaps.
* keymap.c (Fkey_binding):
Add new arguments, NO-REMAP and POSITION.
* keymap.c (map_keymap_mapper):
* keymap.c (Fwhere_is_internal):
* keymap.c (where_is_to_char):
* keymap.c (where_is_recursive_mapper):
Don't expose the key remapping in these functions. This conflicts
with GNU, but is more sane for our callers. Access to command
remapping is with the functions #'command-remapping,
#'commands-remapped-to, and #'remap-command, not with the general
keymap functions, apart from the compatibility hack in #'define-key.
* keymap.c (syms_of_keymap):
* keymap.c (vars_of_keymap):
* keymap.c (complex_vars_of_keymap):
* lisp.h: New CHECK_COMMAND macro.
man/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* lispref/keymaps.texi (Keymaps):
* lispref/keymaps.texi (Changing Key Bindings):
* lispref/keymaps.texi (Scanning Keymaps):
* lispref/keymaps.texi (Remapping commands):
* lispref/keymaps.texi (XEmacs): New.
* lispref/keymaps.texi (Other Keymap Functions):
Document the new command remapping functionality in this file.
lisp/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* help.el (describe-function-1):
Document any command remapping that has been done in this function.
tests/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* automated/keymap-tests.el:
Test the new command remapping functionality.
| author | Aidan Kehoe <kehoea@parhasard.net> |
|---|---|
| date | Sun, 02 Sep 2012 14:31:40 +0100 |
| parents | bd80d9103fc8 |
| children |
| rev | line source |
|---|---|
| 1303 | 1 ;;; update-elc.el --- Bytecompile out-of-date dumped files, pre-dumping |
| 428 | 2 |
| 3 ;; Copyright (C) 1997 Free Software Foundation, Inc. | |
| 442 | 4 ;; Copyright (C) 1996 Sun Microsystems, Inc. |
| 1261 | 5 ;; Copyright (C) 2001, 2003 Ben Wing. |
| 428 | 6 |
| 528 | 7 ;; Author: Ben Wing <ben@xemacs.org> |
| 8 ;; Based On: Original by Steven L Baur <steve@xemacs.org> | |
| 428 | 9 ;; Maintainer: XEmacs Development Team |
| 10 ;; Keywords: internal | |
| 11 | |
| 12 ;; This file is part of XEmacs. | |
| 13 | |
|
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5264
diff
changeset
|
14 ;; XEmacs is free software: you can redistribute it and/or modify it |
|
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5264
diff
changeset
|
15 ;; under the terms of the GNU General Public License as published by the |
|
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5264
diff
changeset
|
16 ;; Free Software Foundation, either version 3 of the License, or (at your |
|
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5264
diff
changeset
|
17 ;; option) any later version. |
| 428 | 18 |
|
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5264
diff
changeset
|
19 ;; XEmacs is distributed in the hope that it will be useful, but WITHOUT |
|
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5264
diff
changeset
|
20 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5264
diff
changeset
|
21 ;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5264
diff
changeset
|
22 ;; for more details. |
| 428 | 23 |
| 24 ;; You should have received a copy of the GNU General Public License | |
|
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5264
diff
changeset
|
25 ;; along with XEmacs. If not, see <http://www.gnu.org/licenses/>. |
| 428 | 26 |
| 27 ;;; Synched up with: Not in FSF. | |
| 28 | |
| 29 ;;; Commentary: | |
| 30 | |
| 31 ;; Byte compile the .EL files necessary to dump out xemacs. | |
| 1261 | 32 ;; Also update the auto-autoloads.el files. |
| 33 | |
| 428 | 34 ;; Use this file like this: |
| 35 | |
| 36 ;; temacs -batch -l ../lisp/update-elc.el $lisp | |
| 37 | |
| 38 ;; where $lisp comes from the Makefile. .elc files listed in $lisp will | |
| 39 ;; cause the corresponding .el file to be compiled. .el files listed in | |
| 40 ;; $lisp will be ignored. | |
| 41 | |
| 42 ;; (the idea here is that you can bootstrap if your .ELC files | |
| 43 ;; are missing or badly out-of-date) | |
| 44 | |
| 442 | 45 ;; See also update-elc-2.el |
| 428 | 46 |
| 47 ;;; Code: | |
| 48 | |
| 1261 | 49 ;; Help debug problems. |
| 50 (setq stack-trace-on-error t | |
| 51 load-always-display-messages t) | |
| 52 | |
| 428 | 53 (defvar processed nil) |
| 54 (defvar update-elc-files-to-compile nil) | |
| 528 | 55 (defvar need-to-rebuild-autoloads nil) |
| 56 (defvar need-to-rebuild-mule-autoloads nil) | |
| 57 (defvar need-to-recompile-autoloads nil) | |
| 58 (defvar need-to-recompile-mule-autoloads nil) | |
| 1330 | 59 (defvar exe-target nil) |
| 60 (defvar dump-target nil) | |
| 61 (defvar dump-target-out-of-date-wrt-dump-files nil) | |
| 62 ;(defvar dump-target-out-of-date-wrt-exe-target nil) | |
| 428 | 63 |
| 64 ;(setq update-elc-files-to-compile | |
| 65 ; (delq nil | |
| 66 ; (mapcar (function | |
| 67 ; (lambda (x) | |
| 68 ; (if (string-match "\.elc$" x) | |
| 69 ; (let ((src (substring x 0 -1))) | |
| 70 ; (if (file-newer-than-file-p src x) | |
| 71 ; (progn | |
| 72 ; (and (file-exists-p x) | |
| 73 ; (null (file-writable-p x)) | |
| 74 ; (set-file-modes x (logior (file-modes x) 128))) | |
| 75 ; src)))))) | |
| 76 ; ;; -batch gets filtered out. | |
| 77 ; (nthcdr 3 command-line-args)))) | |
| 78 | |
| 1330 | 79 |
| 3511 | 80 (defvar build-directory (expand-file-name ".." invocation-directory)) |
| 81 | |
| 1330 | 82 (defvar source-lisp (file-name-directory (expand-file-name |
| 3511 | 83 (nth 2 command-line-args)))) |
| 84 | |
| 1330 | 85 (defvar source-lisp-mule (expand-file-name "mule" source-lisp)) |
| 3511 | 86 (defvar source-directory (expand-file-name ".." source-lisp)) |
| 1330 | 87 (defvar aa-lisp (expand-file-name "auto-autoloads.el" source-lisp)) |
| 88 (defvar aac-lisp (expand-file-name "auto-autoloads.elc" source-lisp)) | |
| 89 (defvar aa-lisp-mule (expand-file-name "auto-autoloads.el" source-lisp-mule)) | |
| 90 (defvar aac-lisp-mule (expand-file-name "auto-autoloads.elc" source-lisp-mule)) | |
| 91 | |
| 92 (setq load-path (list source-lisp)) | |
| 428 | 93 |
| 94 (load "find-paths.el") | |
| 95 (load "packages.el") | |
| 96 (load "setup-paths.el") | |
| 1261 | 97 |
| 98 ;; Lisp files loaded in order to byte compile anything. If any are out of | |
| 99 ;; date, we need to load them as .el's, byte compile them, and reload as | |
| 100 ;; .elc's. | |
| 101 (defvar lisp-files-needed-for-byte-compilation | |
| 102 '("bytecomp" | |
|
5319
ed5d4f081fa9
cl-macs belongs in lisp-files-needed-for-byte-compilation.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5264
diff
changeset
|
103 "cl-macs" |
| 1261 | 104 "byte-optimize")) |
| 105 | |
| 1263 | 106 ;; Lisp files not in `lisp-files-needed-for-byte-compilation' that need |
| 107 ;; early byte compilation. These are files loaded by update-elc.el in | |
| 108 ;; order to do the compilation of all the rest of the files. | |
| 1261 | 109 (defvar lisp-files-needing-early-byte-compilation |
| 2548 | 110 '("easy-mmode" |
| 1261 | 111 "autoload" |
|
5319
ed5d4f081fa9
cl-macs belongs in lisp-files-needed-for-byte-compilation.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5264
diff
changeset
|
112 "shadow")) |
| 1261 | 113 |
| 114 (defvar unbytecompiled-lisp-files | |
| 115 '("paths.el" | |
| 116 "dumped-lisp.el" | |
| 117 "dumped-pkg-lisp.el" | |
| 4246 | 118 "raw-process.el") |
| 2367 | 119 "Lisp files that should not be byte compiled. |
| 120 Files in `additional-dump-dependencies' do not need to be listed here.") | |
| 121 | |
| 122 (defvar additional-dump-dependencies | |
|
4690
257b468bf2ca
Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4246
diff
changeset
|
123 (nconc '("loadup.el" |
|
257b468bf2ca
Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4246
diff
changeset
|
124 "loadup-el.el" |
|
257b468bf2ca
Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4246
diff
changeset
|
125 "update-elc.el") |
|
257b468bf2ca
Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4246
diff
changeset
|
126 (if (featurep 'mule) |
|
257b468bf2ca
Move the #'query-coding-region implementation to C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4246
diff
changeset
|
127 '("mule/make-coding-system"))) |
| 2367 | 128 "Lisp files that are not dumped but which the dump depends on. |
| 129 If any of these files are changed, we need to redump.") | |
| 428 | 130 |
| 1298 | 131 (defvar lisp-files-ignored-when-checking-for-autoload-updating |
| 132 '("custom-load.el" | |
| 133 "auto-autoloads.el") | |
| 134 "Lisp files that should not trigger auto-autoloads rebuilding.") | |
| 135 | |
| 528 | 136 (defun update-elc-chop-extension (file) |
| 137 (if (string-match "\\.elc?$" file) | |
|
5089
99f8ebc082d9
Make #'substring an alias of #'subseq; give the latter the byte code.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4995
diff
changeset
|
138 (subseq file 0 (match-beginning 0)) |
| 528 | 139 file)) |
| 428 | 140 |
| 528 | 141 ;; we used to call packages-list-autoloads here, but it's false generality. |
| 142 ;; we need to handle each autoload file differently and there are only | |
| 143 ;; two of them. | |
| 428 | 144 |
| 1261 | 145 (let (preloaded-file-list site-load-packages files-to-process) |
| 528 | 146 |
| 1330 | 147 (load (expand-file-name "dumped-lisp.el" source-lisp)) |
| 442 | 148 |
| 1330 | 149 ;; two setups here: |
| 150 ;; (1) temacs.exe is undumped, dumped into xemacs.exe. Happens with | |
| 151 ;; unexec, but also with pdump under MS Windows native, since | |
| 152 ;; the dumped data is stored as a resource in the xemacs.exe | |
| 153 ;; executable. | |
| 154 ;; (2) xemacs.exe is dumped or undumped. Running `xemacs -nd' gets | |
| 155 ;; you the equivalent of `temacs'. Dumping creates a file | |
| 156 ;; `xemacs.dmp'. | |
| 1261 | 157 |
| 1330 | 158 (cond ((eq system-type 'windows-nt) |
| 159 (setq exe-target "src/temacs.exe" | |
| 160 dump-target "src/xemacs.exe")) | |
| 161 ;; #### need better ways of getting config params | |
| 162 ((not (memq 'pdump (emacs-run-status))) | |
| 163 (setq exe-target "src/temacs" | |
| 164 dump-target "src/xemacs")) | |
| 165 (t | |
| 166 (setq exe-target "src/xemacs" | |
| 167 dump-target "src/xemacs.dmp"))) | |
| 1261 | 168 |
| 3511 | 169 (setq exe-target (expand-file-name exe-target build-directory)) |
| 170 (setq dump-target (expand-file-name dump-target build-directory)) | |
| 1330 | 171 |
| 172 ;; Not currently used. | |
| 173 ; (setq dump-target-out-of-date-wrt-exe-target | |
| 174 ; (cond ((not dump-target) t) | |
| 175 ; (temacs-exe (file-newer-than-file-p temacs-exe dump-target)) | |
| 176 ; ((not data-file) t) | |
| 177 ; (t (file-newer-than-file-p dump-target data-file)))) | |
| 178 ; (setq dump-target-exists (or (and temacs-exe dump-target) | |
| 179 ; (and data-file dump-target)))) | |
| 1261 | 180 |
| 428 | 181 ;; Path setup |
| 182 (let ((package-preloaded-file-list | |
| 183 (packages-collect-package-dumped-lisps late-package-load-path))) | |
| 184 | |
| 185 (setq preloaded-file-list | |
| 186 (append package-preloaded-file-list | |
| 187 preloaded-file-list | |
| 188 packages-hardcoded-lisp))) | |
| 189 | |
| 3511 | 190 (load (expand-file-name "site-packages" source-directory) t t) |
| 428 | 191 (setq preloaded-file-list |
| 192 (append packages-hardcoded-lisp | |
| 193 preloaded-file-list | |
| 194 site-load-packages)) | |
| 1261 | 195 ;; bytecomp, byte-optimize, autoload, etc. are mentioned specially |
| 196 ;; in the lisp-files-need* variables. | |
| 197 (setq files-to-process (append lisp-files-needed-for-byte-compilation | |
| 198 lisp-files-needing-early-byte-compilation | |
| 2367 | 199 additional-dump-dependencies |
| 1261 | 200 preloaded-file-list)) |
| 528 | 201 (while files-to-process |
| 202 (let* ((arg (car files-to-process)) | |
| 2367 | 203 (arg-is-dump-dependency |
| 204 (or (member arg preloaded-file-list) | |
| 205 (member arg additional-dump-dependencies))) | |
| 528 | 206 (arg-sans-extension (update-elc-chop-extension arg)) |
| 207 (full-arg (locate-library arg-sans-extension)) | |
| 208 (full-arg-sans-extension | |
| 209 (if (null full-arg) | |
| 210 (progn | |
| 211 (print (format "Error: Library file %s not found" arg)) | |
| 1261 | 212 (backtrace) |
| 528 | 213 ;; Uncomment in case of trouble |
| 2456 | 214 ;;(print (format "late-package-hierarchies: %S" late-package-hierarchies)) |
| 528 | 215 ;;(print (format "guessed-roots: %S" |
| 216 ;; (paths-find-emacs-roots | |
| 217 ;; invocation-directory invocation-name))) | |
| 218 (kill-emacs)) | |
| 219 (update-elc-chop-extension full-arg))) | |
| 220 (full-arg-el (concat full-arg-sans-extension ".el")) | |
| 221 (full-arg-elc (concat full-arg-sans-extension ".elc")) | |
| 1261 | 222 (full-arg-dir (file-name-directory full-arg-el))) |
| 528 | 223 |
| 2367 | 224 ; (print full-arg-el) |
| 442 | 225 |
| 226 ;; now check if .el or .elc is newer than the dumped exe. | |
| 227 ;; if so, need to redump. | |
| 2367 | 228 (when (and dump-target arg-is-dump-dependency |
| 1298 | 229 ;; no need to check for existence of either of the files |
| 230 ;; because of the definition of file-newer-than-file-p. | |
| 1330 | 231 (or (file-newer-than-file-p full-arg-el dump-target) |
| 232 (file-newer-than-file-p full-arg-elc dump-target))) | |
| 233 (setq dump-target-out-of-date-wrt-dump-files t)) | |
| 528 | 234 |
| 235 (if (and (not (member (file-name-nondirectory arg) | |
| 1261 | 236 unbytecompiled-lisp-files)) |
| 2367 | 237 (not (member (file-name-nondirectory arg) |
| 238 additional-dump-dependencies)) | |
| 528 | 239 (not (member full-arg-el processed)) |
| 1298 | 240 ;; no need to check for existence of either of the files |
| 241 ;; because of the definition of file-newer-than-file-p. | |
| 242 (file-newer-than-file-p full-arg-el full-arg-elc)) | |
| 528 | 243 (setq processed (cons full-arg-el processed))) |
| 244 | |
| 245 (setq files-to-process (cdr files-to-process)))) | |
| 442 | 246 |
| 1261 | 247 ;; Check if we need to rebuild the auto-autoloads.el files -- that is, |
| 248 ;; if ANY .el files have changed. | |
| 1330 | 249 (let ((dirs-to-check (list source-lisp source-lisp-mule))) |
| 1261 | 250 (while dirs-to-check |
| 251 (let* ((dir (car dirs-to-check)) | |
| 252 (full-dir (expand-file-name dir)) | |
| 253 (all-files-in-dir (directory-files full-dir t "\\.el$" nil t)) | |
| 254 (autoload-file | |
| 255 (expand-file-name "auto-autoloads.el" full-dir)) | |
| 1330 | 256 (autoload-is-mule (equal dir source-lisp-mule))) |
| 1261 | 257 (while all-files-in-dir |
| 258 (let* ((full-arg (car all-files-in-dir))) | |
| 1298 | 259 ;; custom-load.el always gets regenerated so don't let that |
| 260 ;; trigger us. | |
| 261 (when (and (not | |
| 262 (member | |
| 263 (file-name-nondirectory full-arg) | |
| 264 lisp-files-ignored-when-checking-for-autoload-updating | |
| 265 )) | |
| 266 (file-newer-than-file-p full-arg autoload-file)) | |
| 1261 | 267 (if autoload-is-mule |
| 268 (setq need-to-rebuild-mule-autoloads t) | |
| 269 (setq need-to-rebuild-autoloads t)))) | |
| 270 (setq all-files-in-dir (cdr all-files-in-dir)))) | |
| 271 (setq dirs-to-check (cdr dirs-to-check)))) | |
| 272 | |
| 1330 | 273 (if dump-target-out-of-date-wrt-dump-files |
| 442 | 274 (condition-case nil |
| 1330 | 275 (write-region-internal |
| 3511 | 276 "foo" nil (expand-file-name "src/NEEDTODUMP" build-directory)) |
| 442 | 277 (file-error nil))) |
| 278 | |
| 279 ) | |
| 428 | 280 |
| 528 | 281 (when (or need-to-rebuild-autoloads |
| 1298 | 282 ;; no real need for the following check either, because if the file |
| 283 ;; doesn't exist, need-to-rebuild-autoloads gets set above. but | |
| 284 ;; it's only one call, so it won't slow things down much and it keeps | |
| 285 ;; the logic cleaner. | |
| 1330 | 286 (not (file-exists-p aa-lisp)) |
| 1298 | 287 ;; no need to check for file-exists of .elc due to definition |
| 288 ;; of file-newer-than-file-p | |
| 1330 | 289 (file-newer-than-file-p aa-lisp aac-lisp)) |
| 528 | 290 (setq need-to-recompile-autoloads t)) |
| 291 | |
| 292 (when (or need-to-rebuild-mule-autoloads | |
| 1298 | 293 ;; not necessary but ... see comment above. |
| 1330 | 294 (not (file-exists-p aa-lisp-mule)) |
| 1298 | 295 ;; no need to check for file-exists of .elc due to definition |
| 296 ;; of file-newer-than-file-p | |
| 1330 | 297 (file-newer-than-file-p aa-lisp-mule aac-lisp-mule)) |
| 528 | 298 (setq need-to-recompile-mule-autoloads t)) |
| 299 | |
| 300 (when (not (featurep 'mule)) | |
| 301 ;; sorry charlie. | |
| 302 (setq need-to-rebuild-mule-autoloads nil | |
| 303 need-to-recompile-mule-autoloads nil)) | |
| 304 | |
| 428 | 305 (setq update-elc-files-to-compile (append update-elc-files-to-compile |
| 622 | 306 (nreverse processed))) |
| 428 | 307 |
| 1261 | 308 ;(print update-elc-files-to-compile) |
| 428 | 309 |
| 1261 | 310 (let ((do-autoload-commands |
| 311 (append | |
| 312 (if (or need-to-rebuild-autoloads | |
| 313 need-to-rebuild-mule-autoloads) | |
| 1330 | 314 (list "-l" "autoload")) |
| 1261 | 315 (if need-to-rebuild-autoloads |
| 2548 | 316 (list "-f" "batch-update-directory-autoloads" |
| 1330 | 317 "auto" source-lisp)) |
| 1261 | 318 (if need-to-rebuild-mule-autoloads |
| 2548 | 319 (list "-f" "batch-update-directory-autoloads" |
| 1330 | 320 "mule" source-lisp-mule)) |
| 1261 | 321 (if need-to-recompile-autoloads |
| 1330 | 322 (list "-f" "batch-byte-compile-one-file" |
| 323 aa-lisp)) | |
| 1261 | 324 (if need-to-recompile-mule-autoloads |
| 1330 | 325 (list "-f" "batch-byte-compile-one-file" |
| 326 aa-lisp-mule))))) | |
| 1298 | 327 (condition-case nil |
| 3511 | 328 (delete-file (expand-file-name "src/REBUILD_AUTOLOADS" build-directory)) |
| 1298 | 329 (file-error nil)) |
| 1261 | 330 (cond ((and (not update-elc-files-to-compile) |
| 331 (not need-to-rebuild-autoloads) | |
| 332 (not need-to-rebuild-mule-autoloads) | |
| 333 (not need-to-recompile-autoloads) | |
| 334 (not need-to-recompile-mule-autoloads)) | |
| 1315 | 335 ;; (1) Nothing to do at all. |
| 336 ) | |
| 1298 | 337 ((not update-elc-files-to-compile) |
| 1261 | 338 ;; (2) We have no files to byte-compile, but we do need to |
| 1298 | 339 ;; regenerate and compile the auto-autoloads file, so signal |
| 340 ;; update-elc-2 to do it. This is much faster than loading | |
| 341 ;; all the .el's and doing it here. (We only need to rebuild | |
| 342 ;; the autoloads here when we have files to compile, since | |
| 343 ;; they may depend on the updated autoloads.) | |
| 344 (condition-case nil | |
| 1330 | 345 (write-region-internal |
| 3511 | 346 "foo" nil (expand-file-name "src/REBUILD_AUTOLOADS" build-directory)) |
| 1298 | 347 (file-error nil)) |
| 1315 | 348 ) |
| 1261 | 349 (t |
| 350 (let ((bc-bootstrap | |
| 351 (mapcar #'(lambda (arg) | |
| 352 (concat (update-elc-chop-extension | |
| 353 (locate-library arg)) ".el")) | |
| 354 lisp-files-needed-for-byte-compilation)) | |
| 355 (bootstrap-other | |
| 356 (mapcar #'(lambda (arg) | |
| 357 (concat (update-elc-chop-extension | |
| 358 (locate-library arg)) ".el")) | |
| 359 lisp-files-needing-early-byte-compilation))) | |
| 360 (setq inhibit-autoloads t) | |
| 528 | 361 ;; if bytecomp or byte-optimize need recompiling, then load |
| 362 ;; the .el version of them first, recompile them, and reload | |
| 363 ;; the .elc versions to recompile everything else (so we won't | |
| 364 ;; be waiting until the cows come home). we need to set | |
| 365 ;; load-ignore-elc-files because byte-optimize gets autoloaded | |
| 366 ;; from bytecomp. | |
| 1261 | 367 (let ((recompile-bc-bootstrap |
|
5264
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
368 (mapcan |
|
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
369 #'(lambda (arg) |
|
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
370 (when (member arg update-elc-files-to-compile) |
|
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
371 (append '("-f" "batch-byte-compile-one-file") |
|
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
372 (list arg)))) |
|
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
373 bc-bootstrap)) |
| 1261 | 374 (recompile-bootstrap-other |
|
5264
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
375 (mapcan |
|
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
376 #'(lambda (arg) |
|
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
377 (when (member arg update-elc-files-to-compile) |
|
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
378 (append '("-f" "batch-byte-compile-one-file") |
|
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
379 (list arg)))) |
|
0d43872986b6
Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5089
diff
changeset
|
380 bootstrap-other))) |
|
4995
8431b52e43b1
Move the various map* functions to C; add #'map-into.
Aidan Kehoe <kehoea@parhasard.net>
parents:
4690
diff
changeset
|
381 (mapc |
| 1261 | 382 #'(lambda (arg) |
| 383 (setq update-elc-files-to-compile | |
|
5338
8608eadee6ba
Move #'delq, #'delete to Lisp, adding support for sequences.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5319
diff
changeset
|
384 (delete* arg update-elc-files-to-compile |
|
8608eadee6ba
Move #'delq, #'delete to Lisp, adding support for sequences.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5319
diff
changeset
|
385 :test (if default-file-system-ignore-case |
|
8608eadee6ba
Move #'delq, #'delete to Lisp, adding support for sequences.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5319
diff
changeset
|
386 #'equalp |
|
8608eadee6ba
Move #'delq, #'delete to Lisp, adding support for sequences.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5319
diff
changeset
|
387 #'equal)))) |
| 1261 | 388 (append bc-bootstrap bootstrap-other)) |
|
5632
bd80d9103fc8
Integrate CL code better into core, remove obsolete compatibility code.
Aidan Kehoe <kehoea@parhasard.net>
parents:
5468
diff
changeset
|
389 (autoload 'cl-compile-time-init "cl-macs") |
| 1261 | 390 (setq command-line-args |
| 391 (append | |
| 392 '("-l" "loadup-el.el" "run-temacs" | |
| 393 "-batch" "-no-packages" "-no-autoloads" | |
| 394 "-eval" "(setq stack-trace-on-error t)" | |
| 395 "-eval" "(setq load-always-display-messages t)") | |
| 396 (when recompile-bc-bootstrap | |
| 397 (append | |
| 398 '("-eval" "(setq load-ignore-elc-files t)" | |
| 399 "-l" "bytecomp") | |
| 400 recompile-bc-bootstrap | |
| 401 '("-eval" "(setq load-ignore-elc-files nil)"))) | |
| 402 '("-l" "bytecomp") | |
| 403 ;; likewise, recompile autoload.el etc. if out-of-date. | |
| 404 recompile-bootstrap-other | |
| 405 ;; then generate autoloads for lisp and maybe lisp/mule. | |
| 406 do-autoload-commands | |
| 407 ;; now load the autoloads and compile alles anderes. | |
| 408 '("-eval" "(setq inhibit-autoloads nil)" | |
| 409 "-f" "startup-load-autoloads" | |
| 410 "-f" "batch-byte-compile") | |
| 411 update-elc-files-to-compile | |
| 412 )))) | |
| 413 | |
| 414 ;;(print command-line-args) | |
| 415 (load "loadup-el.el")))) | |
| 428 | 416 |
| 1303 | 417 (kill-emacs) |
| 428 | 418 |
| 419 ;;; update-elc.el ends here |
