all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Julien Danjou <julien@danjou.info>
To: emacs-devel@gnu.org
Cc: Julien Danjou <julien@danjou.info>
Subject: [PATCH] Split byte-recompile-directory into byte-recompile-file
Date: Sun, 26 Sep 2010 10:03:53 +0200	[thread overview]
Message-ID: <1285488233-9954-1-git-send-email-julien@danjou.info> (raw)
In-Reply-To: <jwveich33x1.fsf-monnier+emacs@gnu.org>

Signed-off-by: Julien Danjou <julien@danjou.info>
---
 lisp/ChangeLog              |    5 +++
 lisp/emacs-lisp/bytecomp.el |   63 ++++++++++++++++++++++++++++++------------
 2 files changed, 50 insertions(+), 18 deletions(-)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index bfbb0de..69330aa 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2010-09-26  Julien Danjou  <julien@danjou.info>
+
+	* emacs-lisp/bytecomp.el (byte-recompile-file): Add this function.
+	(byte-recompile-directory): Use `byte-recompile-file'.
+
 2010-09-25  Julien Danjou  <julien@danjou.info>
 
 	* notifications.el: Call dbus-register-signal only if the function
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index e6ca7f6..3117214 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -37,6 +37,7 @@
 ;; ========================================================================
 ;; Entry points:
 ;;	byte-recompile-directory, byte-compile-file,
+;;      byte-recompile-file,
 ;;     batch-byte-compile, batch-byte-recompile-directory,
 ;;	byte-compile, compile-defun,
 ;;	display-call-tree
@@ -1531,7 +1532,7 @@ that already has a `.elc' file."
 	 (setq bytecomp-directory (car bytecomp-directories))
 	 (message "Checking %s..." bytecomp-directory)
 	 (let ((bytecomp-files (directory-files bytecomp-directory))
-	       bytecomp-source bytecomp-dest)
+	       bytecomp-source)
 	   (dolist (bytecomp-file bytecomp-files)
 	     (setq bytecomp-source
                    (expand-file-name bytecomp-file bytecomp-directory))
@@ -1551,23 +1552,10 @@ that already has a `.elc' file."
 			(not (auto-save-file-name-p bytecomp-source))
 			(not (string-equal dir-locals-file
 					   (file-name-nondirectory
-					    bytecomp-source)))
-			(setq bytecomp-dest
-                              (byte-compile-dest-file bytecomp-source))
-			(if (file-exists-p bytecomp-dest)
-			    ;; 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)))
+					    bytecomp-source))))
+		   (progn (let ((bytecomp-res (byte-recompile-file
+                                               bytecomp-source
+                                               bytecomp-force bytecomp-arg)))
 			    (cond ((eq bytecomp-res 'no-byte-compile)
 				   (setq skip-count (1+ skip-count)))
 				  ((eq bytecomp-res t)
@@ -1595,6 +1583,45 @@ This is normally set in local file variables at the end of the elisp file:
 ;; Local Variables:\n;; no-byte-compile: t\n;; End: ")
 ;;;###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."
+  (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 if
+            ;; `bytecomp-filename' is newer than `bytecomp-dest'.
+            (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
 (defun byte-compile-file (bytecomp-filename &optional load)
   "Compile a file of Lisp code named BYTECOMP-FILENAME into a file of byte code.
-- 
1.7.1




  reply	other threads:[~2010-09-26  8:03 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-21 15:26 [PATCH 1/4] Split byte-recompile-directory into byte-recompile-file Julien Danjou
2010-09-21 15:26 ` [PATCH 2/4] Use byte-recompile-file in emacs-lisp-byte-compile-and-load Julien Danjou
2010-09-21 15:26 ` [PATCH 3/4] Use byte-recompile-file in cedet/project-compile-target Julien Danjou
2010-09-21 15:26 ` [PATCH 4/4] (project-compile-target) use byte-recompile-file Julien Danjou
2010-09-25 21:35 ` [PATCH 1/4] Split byte-recompile-directory into byte-recompile-file Stefan Monnier
2010-09-26  8:03   ` Julien Danjou [this message]
2010-10-02 13:48     ` [PATCH] " Julien Danjou
2010-10-08  9:16       ` Julien Danjou
2010-10-21 10:31         ` Julien Danjou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1285488233-9954-1-git-send-email-julien@danjou.info \
    --to=julien@danjou.info \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.