emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

force auto compile .el files


From: Giuseppe Scrivano
Subject: force auto compile .el files
Date: Sat, 25 Mar 2006 13:25:00 +0100
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)

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 via email to

[Prev in Thread] Current Thread [Next in Thread]