Get rid of .elc files after removal of the corresponding .el.
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 22 Mar 2010 13:33:21 +0000 (09:33 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 22 Mar 2010 13:33:21 +0000 (09:33 -0400)
* Makefile.in (compile-clean): New target.
(compile-main): Use it.

lisp/ChangeLog
lisp/Makefile.in

index 2a059b8..afce383 100644 (file)
@@ -1,3 +1,9 @@
+2010-03-22  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       Get rid of .elc files after removal of the corresponding .el.
+       * Makefile.in (compile-clean): New target.
+       (compile-main): Use it.
+
 2010-03-22  Jan Djärv  <jan.h.d@swipnet.se>
 
        * Makefile.in (compile-main): cd to $(lisp) in a sub-shell, so we
@@ -19,7 +25,8 @@
        (srcdir): Don't append `/..'.
        (EMACS): Use ${abs_top_builddir}.
        (all, compile, compile-always, compile-last): Don't set emacswd.
-       (update-subdirs, update-authors): Use $(top_srcdir) instead of $(srcdir).
+       (update-subdirs, update-authors): Use $(top_srcdir) instead of
+       $(srcdir).
        (lisp): Use $(srcdir) instead of @srcdir@.
 
 2010-03-21  Juri Linkov  <juri@jurta.org>
index f1219a8..21822a8 100644 (file)
@@ -235,7 +235,7 @@ compile-targets: $(TARGETS)
 
 # Compile all the Elisp files that need it.  Beware: it approximates
 # `no-byte-compile', so watch out for false-positives!
-compile-main:
+compile-main: compile-clean
        @(cd $(lisp); $(setwins); \
        els=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.el |g'`; \
        for el in $$els; do \
@@ -247,6 +247,18 @@ compile-main:
          $(MAKE) $(MFLAGS) compile-targets EMACS="$(EMACS)" TARGETS="$$chunk"; \
        done
 
+.PHONY: compile-clean
+# Erase left-over .elc files that do not have a corresponding .el file.
+compile-clean:
+       @cd $(lisp); $(setwins); \
+       elcs=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.elc |g'`; \
+       for el in $$(echo $$elcs | sed -e 's/\.elc/\.el/g'); do \
+         if test -f "$$el" -o \! -f "$${el}c"; then :; else \
+           echo rm "$${el}c"; \
+           rm "$${el}c"; \
+         fi \
+       done
+
 # Compile all Lisp files, but don't recompile those that are up to
 # date.  Some .el files don't get compiled because they set the
 # local variable no-byte-compile.