unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Giuseppe Scrivano <gscrivano@gnu.org>
Subject: force auto compile .el files
Date: Sat, 25 Mar 2006 13:25:00 +0100	[thread overview]
Message-ID: <87pskahftv.fsf@gnu.org> (raw)

hello,

what do you think about the following patch?  Actually when
emacs tries to open an outdated .elc file it shows only a 
warning message, differently with this patch if the symbol 
`force-auto-compile' is not nil it automatically tries to 
compile the newer .el source file.  If the symbol is nil
it shows only the warning message.

Thanks,
Giuseppe


--- src/lread.c.old	2006-03-23 15:28:30.000000000 +0100
+++ src/lread.c	2006-03-25 12:33:00.000000000 +0100
@@ -724,6 +724,8 @@
   int newer = 0;
   /* 1 means we are loading a compiled file.  */
   int compiled = 0;
+	/* 1 means we forced the compilation of the .el file.  */
+	int force_compiled = 0;
   Lisp_Object handler;
   int safe_p = 1;
   char *fmode = "r";
@@ -887,9 +889,32 @@
 
 	  if (result >= 0 && (unsigned) s1.st_mtime < (unsigned) s2.st_mtime)
 	    {
-	      /* Make the progress messages mention that source is newer.  */
-	      newer = 1;
-
+				/* If the symbol `force-auto-compile' is not NIL then try to
+					 automatically recompile the updated .el file.  If the value
+					 is NIL show only a warning.  */
+				if (!NILP (Fintern_soft (make_specified_string ("force-auto-compile", 
+																												-1, 18, 0), Qnil)))
+					{
+						Lisp_Object args[2];
+
+						args[0] = Fintern_soft (make_specified_string ("byte-compile-file",
+																													 -1, 17, 0), Qnil);
+
+						SSET (efound, SBYTES (efound) - 1, 0);
+						args[1] = Fsubstring (efound, make_number (0), make_number (-1));
+
+						if (args[0] != Qnil)
+							force_compiled = !NILP (Ffuncall (2, args));
+						else
+							newer = 1;
+
+						SSET (efound, SBYTES (efound) - 1, 'c');
+					}
+				else
+					{
+						/* Make the progress messages mention that source is newer.  */
+						newer = 1;
+					}
 	      /* If we won't print another message, mention this anyway.  */
 	      if (!NILP (nomessage))
 		{
@@ -941,9 +966,11 @@
       if (!safe_p)
 	message_with_string ("Loading %s (compiled; note unsafe, not compiled in Emacs)...",
 		 file, 1);
+			else if (force_compiled)
+	message_with_string ("Loading %s (force compiled)...", file, 1);
       else if (!compiled)
 	message_with_string ("Loading %s (source)...", file, 1);
-      else if (newer)
+			else if (newer)
 	message_with_string ("Loading %s (compiled; note, source file is newer)...",
 		 file, 1);
       else /* The typical case; compiled file newer than source file.  */

             reply	other threads:[~2006-03-25 12:25 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-25 12:25 Giuseppe Scrivano [this message]
2006-03-26  0:20 ` force auto compile .el files Richard Stallman
2006-03-26  0:59   ` Giuseppe Scrivano
2006-03-26  1:23     ` Thien-Thi Nguyen
2006-03-27  8:35     ` Richard Stallman

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

  List information: https://www.gnu.org/software/emacs/

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

  git send-email \
    --in-reply-to=87pskahftv.fsf@gnu.org \
    --to=gscrivano@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 public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).