Commit 430e7297 authored by Julien Danjou's avatar Julien Danjou Committed by Stefan Monnier
Browse files

* lisp/emacs-lisp/bytecomp.el (byte-recompile-file): New fun.

(byte-recompile-directory):
* lisp/emacs-lisp/lisp-mode.el (emacs-lisp-byte-compile-and-load):
* cedet/ede/proj-elisp.el (project-compile-target):
* cedet/semantic/ede-grammar.el (project-compile-target):
Use `byte-recompile-file'.

Fixes: debbugs:7297
parent f486841f
2010-10-31 Julien Danjou <julien@danjou.info>
* emacs-lisp/bytecomp.el (byte-recompile-file): New fun (bug#7297).
(byte-recompile-directory):
* emacs-lisp/lisp-mode.el (emacs-lisp-byte-compile-and-load):
* cedet/ede/proj-elisp.el (project-compile-target):
* cedet/semantic/ede-grammar.el (project-compile-target):
Use `byte-recompile-file'.
2010-10-31 Glenn Morris <rgm@gnu.org> 2010-10-31 Glenn Morris <rgm@gnu.org>
   
* cus-start.el: Handle standard values via a keyword. * cus-start.el: Handle standard values via a keyword.
......
...@@ -131,11 +131,8 @@ Bonus: Return a cons cell: (COMPILED . UPTODATE)." ...@@ -131,11 +131,8 @@ Bonus: Return a cons cell: (COMPILED . UPTODATE)."
(let* ((fsrc (expand-file-name src dir)) (let* ((fsrc (expand-file-name src dir))
(elc (concat (file-name-sans-extension fsrc) ".elc")) (elc (concat (file-name-sans-extension fsrc) ".elc"))
) )
(if (or (not (file-exists-p elc)) (if (eq (byte-recompile-file fsrc nil 0)) t)
(file-newer-than-file-p fsrc elc)) (setq comp (1+ comp))
(progn
(setq comp (1+ comp))
(byte-compile-file fsrc))
(setq utd (1+ utd))))) (setq utd (1+ utd)))))
(oref obj source)) (oref obj source))
(message "All Emacs Lisp sources are up to date in %s" (object-name obj)) (message "All Emacs Lisp sources are up to date in %s" (object-name obj))
......
...@@ -133,10 +133,7 @@ Lays claim to all -by.el, and -wy.el files." ...@@ -133,10 +133,7 @@ Lays claim to all -by.el, and -wy.el files."
(save-excursion (save-excursion
(semantic-grammar-create-package)) (semantic-grammar-create-package))
(save-buffer) (save-buffer)
(let ((cf (concat (semantic-grammar-package) ".el"))) (byte-recompile-file (concat (semantic-grammar-package) ".el") nil 0))
(if (or (not (file-exists-p cf))
(file-newer-than-file-p src cf))
(byte-compile-file cf)))))
(oref obj source))) (oref obj source)))
(message "All Semantic Grammar sources are up to date in %s" (object-name obj))) (message "All Semantic Grammar sources are up to date in %s" (object-name obj)))
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
;; ======================================================================== ;; ========================================================================
;; Entry points: ;; Entry points:
;; byte-recompile-directory, byte-compile-file, ;; byte-recompile-directory, byte-compile-file,
;; byte-recompile-file,
;; batch-byte-compile, batch-byte-recompile-directory, ;; batch-byte-compile, batch-byte-recompile-directory,
;; byte-compile, compile-defun, ;; byte-compile, compile-defun,
;; display-call-tree ;; display-call-tree
...@@ -1551,23 +1552,10 @@ that already has a `.elc' file." ...@@ -1551,23 +1552,10 @@ that already has a `.elc' file."
(not (auto-save-file-name-p bytecomp-source)) (not (auto-save-file-name-p bytecomp-source))
(not (string-equal dir-locals-file (not (string-equal dir-locals-file
(file-name-nondirectory (file-name-nondirectory
bytecomp-source))) bytecomp-source))))
(setq bytecomp-dest (progn (let ((bytecomp-res (byte-recompile-file
(byte-compile-dest-file bytecomp-source)) bytecomp-source
(if (file-exists-p bytecomp-dest) bytecomp-force bytecomp-arg)))
;; File was already compiled.
(or bytecomp-force
(file-newer-than-file-p bytecomp-source
bytecomp-dest))
;; No compiled file exists yet.
(and bytecomp-arg
(or (eq 0 bytecomp-arg)
(y-or-n-p (concat "Compile "
bytecomp-source "? "))))))
(progn (if (and noninteractive (not byte-compile-verbose))
(message "Compiling %s..." bytecomp-source))
(let ((bytecomp-res (byte-compile-file
bytecomp-source)))
(cond ((eq bytecomp-res 'no-byte-compile) (cond ((eq bytecomp-res 'no-byte-compile)
(setq skip-count (1+ skip-count))) (setq skip-count (1+ skip-count)))
((eq bytecomp-res t) ((eq bytecomp-res t)
...@@ -1595,6 +1583,59 @@ This is normally set in local file variables at the end of the elisp file: ...@@ -1595,6 +1583,59 @@ This is normally set in local file variables at the end of the elisp file:
;; Local Variables:\n;; no-byte-compile: t\n;; End: ") ;; Local Variables:\n;; no-byte-compile: t\n;; End: ")
;;;###autoload(put 'no-byte-compile 'safe-local-variable 'booleanp) ;;;###autoload(put 'no-byte-compile 'safe-local-variable 'booleanp)
(defun byte-recompile-file (bytecomp-filename &optional bytecomp-force bytecomp-arg load)
"Recompile BYTECOMP-FILENAME file if it needs recompilation.
This happens when its `.elc' file is older than itself.
If the `.elc' file exists and is up-to-date, normally this
function *does not* compile BYTECOMP-FILENAME. However, if the
prefix argument BYTECOMP-FORCE is set, that means do compile
BYTECOMP-FILENAME even if the destination already exists and is
up-to-date.
If the `.elc' file does not exist, normally this function *does
not* compile BYTECOMP-FILENAME. If BYTECOMP-ARG is 0, that means
compile the file even if it has never been compiled before.
A nonzero BYTECOMP-ARG means ask the user.
If LOAD is set, `load' the file after compiling.
The value returned is the value returned by `byte-compile-file',
or 'no-byte-compile if the file did not need recompilation."
(interactive
(let ((bytecomp-file buffer-file-name)
(bytecomp-file-name nil)
(bytecomp-file-dir nil))
(and bytecomp-file
(eq (cdr (assq 'major-mode (buffer-local-variables)))
'emacs-lisp-mode)
(setq bytecomp-file-name (file-name-nondirectory bytecomp-file)
bytecomp-file-dir (file-name-directory bytecomp-file)))
(list (read-file-name (if current-prefix-arg
"Byte compile file: "
"Byte recompile file: ")
bytecomp-file-dir bytecomp-file-name nil)
current-prefix-arg)))
(let ((bytecomp-dest
(byte-compile-dest-file bytecomp-filename))
;; Expand now so we get the current buffer's defaults
(bytecomp-filename (expand-file-name bytecomp-filename)))
(if (if (file-exists-p bytecomp-dest)
;; File was already compiled
;; Compile if forced to, or filename newer
(or bytecomp-force
(file-newer-than-file-p bytecomp-filename
bytecomp-dest))
(or (eq 0 bytecomp-arg)
(y-or-n-p (concat "Compile "
bytecomp-filename "? "))))
(progn
(if (and noninteractive (not byte-compile-verbose))
(message "Compiling %s..." bytecomp-source))
(byte-compile-file bytecomp-filename load))
(when load (load bytecomp-filename))
'no-byte-compile)))
;;;###autoload ;;;###autoload
(defun byte-compile-file (bytecomp-filename &optional load) (defun byte-compile-file (bytecomp-filename &optional load)
"Compile a file of Lisp code named BYTECOMP-FILENAME into a file of byte code. "Compile a file of Lisp code named BYTECOMP-FILENAME into a file of byte code.
......
...@@ -407,10 +407,7 @@ All commands in `lisp-mode-shared-map' are inherited by this map.") ...@@ -407,10 +407,7 @@ All commands in `lisp-mode-shared-map' are inherited by this map.")
(if (and (buffer-modified-p) (if (and (buffer-modified-p)
(y-or-n-p (format "Save buffer %s first? " (buffer-name)))) (y-or-n-p (format "Save buffer %s first? " (buffer-name))))
(save-buffer)) (save-buffer))
(let ((compiled-file-name (byte-compile-dest-file buffer-file-name))) (byte-recompile-file buffer-file-name nil 0 t))
(if (file-newer-than-file-p compiled-file-name buffer-file-name)
(load-file compiled-file-name)
(byte-compile-file buffer-file-name t))))
(defcustom emacs-lisp-mode-hook nil (defcustom emacs-lisp-mode-hook nil
"Hook run when entering Emacs Lisp mode." "Hook run when entering Emacs Lisp mode."
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment