--- 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. */