summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Morris <rgm@gnu.org>2014-06-14 17:17:21 -0700
committerGlenn Morris <rgm@gnu.org>2014-06-14 17:17:21 -0700
commit0e6929ecab39164b384c76884a7eac559a1fe9b9 (patch)
treea1c0f3548f81156c9c971d803b8d0c31e4dc1303
parent90de50e27049ae19492dd9843e50618ea4ed5d14 (diff)
Parallelize clean rules using GNU make features
* Makefile.in: (submake_template): New definition. (mostlyclean_dirs, clean_dirs, distclean_dirs, maintainer_clean_dirs): New variables. (mostlyclean, clean, distclean, bootstrap-clean, maintainer-clean) (extraclean): Define using each subdirectory as a prequisite. * lib/Makefile.am (bootstrap-clean): * doc/emacs/Makefile.in (bootstrap-clean): * doc/lispintro/Makefile.in (bootstrap-clean): * doc/lispref/Makefile.in (bootstrap-clean): * doc/misc/Makefile.in (bootstrap-clean): * lib-src/Makefile.in (bootstrap-clean): * lwlib/Makefile.in (bootstrap-clean): * nextstep/Makefile.in (bootstrap-clean): * nt/Makefile.in (bootstrap-clean): * oldXMenu/Makefile.in (bootstrap-clean): New rules, for symmetry/simplicity. * lwlib/Makefile.in (mostlyclean, clean, distclean, maintainer-clean): * oldXMenu/Makefile.in (mostlyclean, clean, distclean, maintainer-clean, tags): Declare as PHONY.
-rw-r--r--ChangeLog10
-rw-r--r--Makefile.in106
-rw-r--r--doc/emacs/ChangeLog4
-rw-r--r--doc/emacs/Makefile.in4
-rw-r--r--doc/lispintro/ChangeLog4
-rw-r--r--doc/lispintro/Makefile.in4
-rw-r--r--doc/lispref/ChangeLog4
-rw-r--r--doc/lispref/Makefile.in4
-rw-r--r--doc/misc/ChangeLog4
-rw-r--r--doc/misc/Makefile.in4
-rw-r--r--lib-src/ChangeLog4
-rw-r--r--lib-src/Makefile.in4
-rw-r--r--lib/Makefile.am4
-rw-r--r--lwlib/ChangeLog6
-rw-r--r--lwlib/Makefile.in9
-rw-r--r--nextstep/ChangeLog4
-rw-r--r--nextstep/Makefile.in4
-rw-r--r--nt/ChangeLog4
-rw-r--r--nt/Makefile.in4
-rw-r--r--oldXMenu/ChangeLog6
-rw-r--r--oldXMenu/Makefile.in13
21 files changed, 128 insertions, 82 deletions
diff --git a/ChangeLog b/ChangeLog
index 2c3e6c722a..5bb156ff80 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2014-06-15 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in: Parallelize clean rules using GNU make features.
+ (submake_template): New definition.
+ (mostlyclean_dirs, clean_dirs, distclean_dirs, maintainer_clean_dirs):
+ New variables.
+ (mostlyclean, clean, distclean, bootstrap-clean, maintainer-clean)
+ (extraclean): Define using each subdirectory as a prequisite.
+ * lib/Makefile.am (bootstrap-clean): New.
+
2014-06-15 Paul Eggert <eggert@cs.ucla.edu>
Port part of the AIX fix to Solaris (Bug#17598).
diff --git a/Makefile.in b/Makefile.in
index f9bfa082b0..d908bf1657 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -770,22 +770,27 @@ uninstall-nt:
.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean extraclean
+## Eg:
+## src_clean:
+## make -C src clean
+define submake_template
+.PHONY: $(1)_$(2)
+$(1)_$(2):
+ $$(MAKE) -C $(1) $(2)
+endef
+
### `mostlyclean'
### Like `clean', but may refrain from deleting a few files that people
### normally don't want to recompile. For example, the `mostlyclean'
### target for GCC does not delete `libgcc.a', because recompiling it
### is rarely necessary and takes a lot of time.
-mostlyclean:
- cd src && $(MAKE) mostlyclean
- cd oldXMenu && $(MAKE) mostlyclean
- cd lwlib && $(MAKE) mostlyclean
- cd lib && $(MAKE) mostlyclean
- cd lib-src && $(MAKE) mostlyclean
- cd nt && $(MAKE) mostlyclean
- -cd doc/emacs && $(MAKE) mostlyclean
- -cd doc/misc && $(MAKE) mostlyclean
- -cd doc/lispref && $(MAKE) mostlyclean
- -cd doc/lispintro && $(MAKE) mostlyclean
+mostlyclean_dirs = src oldXMenu lwlib lib lib-src nt doc/emacs doc/misc \
+ doc/lispref doc/lispintro
+
+$(foreach dir,$(mostlyclean_dirs),$(eval $(call submake_template,$(dir),mostlyclean)))
+
+mostlyclean: $(mostlyclean_dirs:=_mostlyclean)
+
### `clean'
### Delete all files from the current directory that are normally
@@ -795,24 +800,18 @@ mostlyclean:
### with them.
###
### Delete `.dvi' files here if they are not part of the distribution.
-clean:
+clean_dirs = $(mostlyclean_dirs) nextstep
+
+$(foreach dir,$(clean_dirs),$(eval $(call submake_template,$(dir),clean)))
+
+clean: $(clean_dirs:=_clean)
-rm -f etc/emacs.tmpdesktop
- cd src && $(MAKE) clean
- cd oldXMenu && $(MAKE) clean
- cd lwlib && $(MAKE) clean
- cd lib && $(MAKE) clean
- cd lib-src && $(MAKE) clean
- cd nt && $(MAKE) clean
- -cd doc/emacs && $(MAKE) clean
- -cd doc/misc && $(MAKE) clean
- -cd doc/lispref && $(MAKE) clean
- -cd doc/lispintro && $(MAKE) clean
- cd nextstep && $(MAKE) clean
### `bootclean'
### Delete all files that need to be remade for a clean bootstrap.
top_bootclean=\
rm -f config.cache config.log
+
### `distclean'
### Delete all files from the current directory that are created by
### configuring or building the program. If you have unpacked the
@@ -822,44 +821,25 @@ top_bootclean=\
top_distclean=\
${top_bootclean}; \
rm -f config.status config.log~ Makefile stamp-h1 ${SUBDIR_MAKEFILES}
-distclean:
- cd src && $(MAKE) distclean
- cd oldXMenu && $(MAKE) distclean
- cd lwlib && $(MAKE) distclean
- cd lib && $(MAKE) distclean
- cd lib-src && $(MAKE) distclean
- cd nt && $(MAKE) distclean
- cd doc/emacs && $(MAKE) distclean
- cd doc/misc && $(MAKE) distclean
- cd doc/lispref && $(MAKE) distclean
- cd doc/lispintro && $(MAKE) distclean
- cd leim && $(MAKE) distclean
- cd lisp && $(MAKE) distclean
- cd nextstep && $(MAKE) distclean
+
+distclean_dirs = $(clean_dirs) leim lisp
+
+$(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),distclean)))
+
+distclean: $(distclean_dirs:=_distclean)
for dir in test/automated admin/grammars admin/unidata; do \
- [ ! -d $$dir ] || (cd $$dir && $(MAKE) distclean); \
+ [ ! -d $$dir ] || $(MAKE) -C $$dir distclean; \
done
${top_distclean}
### `bootstrap-clean'
### Delete everything that can be reconstructed by `make' and that
### needs to be deleted in order to force a bootstrap from a clean state.
-bootstrap-clean:
- cd src && $(MAKE) bootstrap-clean
- cd oldXMenu && $(MAKE) maintainer-clean
- cd lwlib && $(MAKE) maintainer-clean
- cd lib && $(MAKE) maintainer-clean
- cd lib-src && $(MAKE) maintainer-clean
- cd nt && $(MAKE) maintainer-clean
- -cd doc/emacs && $(MAKE) maintainer-clean
- -cd doc/misc && $(MAKE) maintainer-clean
- -cd doc/lispref && $(MAKE) maintainer-clean
- -cd doc/lispintro && $(MAKE) maintainer-clean
- cd leim && $(MAKE) bootstrap-clean
- cd lisp && $(MAKE) bootstrap-clean
- cd nextstep && $(MAKE) maintainer-clean
+$(foreach dir,$(distclean_dirs),$(eval $(call submake_template,$(dir),bootstrap-clean)))
+
+bootstrap-clean: $(distclean_dirs:=_bootstrap-clean)
for dir in test/automated admin/grammars admin/unidata; do \
- [ ! -d $$dir ] || (cd $$dir && $(MAKE) bootstrap-clean); \
+ [ ! -d $$dir ] || $(MAKE) -C $$dir bootstrap-clean; \
done
[ ! -f config.log ] || mv -f config.log config.log~
rm -rf ${srcdir}/info
@@ -879,12 +859,14 @@ bootstrap-clean:
top_maintainer_clean=\
${top_distclean}; \
rm -fr autom4te.cache
-maintainer-clean: bootstrap-clean
- cd src && $(MAKE) maintainer-clean
- cd leim && $(MAKE) maintainer-clean
- cd lisp && $(MAKE) maintainer-clean
+
+maintainer_clean_dirs = src leim lisp
+
+$(foreach dir,$(maintainer_clean_dirs),$(eval $(call submake_template,$(dir),maintainer-clean)))
+
+maintainer-clean: bootstrap-clean $(maintainer_clean_dirs:=_maintainer-clean)
for dir in test/automated admin/grammars admin/unidata; do \
- [ ! -d $$dir ] || (cd $$dir && $(MAKE) maintainer-clean); \
+ [ ! -d $$dir ] || $(MAKE) -C $$dir maintainer-clean; \
done
${top_maintainer_clean}
@@ -892,8 +874,12 @@ maintainer-clean: bootstrap-clean
### says GCC supports it, and that's where the configuration part of
### the coding standards seem to come from. It's like distclean, but
### it deletes backup and autosave files too.
-extraclean:
- for i in ${SUBDIR}; do (cd $$i; $(MAKE) extraclean); done
+### Note that we abuse this in some subdirectories (eg leim),
+### to delete some generated files that are slow to rebuild.
+$(foreach dir,$(SUBDIR),$(eval $(call submake_template,$(dir),extraclean)))
+
+## FIXME this is busted because most of these do not have extraclean rules.
+extraclean: $(SUBDIR:=_extraclean)
${top_maintainer_clean}
-rm -f config-tmp-*
-rm -f *~ \#*
diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog
index b2b4b37992..c7fe1dfbff 100644
--- a/doc/emacs/ChangeLog
+++ b/doc/emacs/ChangeLog
@@ -1,3 +1,7 @@
+2014-06-15 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (bootstrap-clean): New.
+
2014-06-10 Glenn Morris <rgm@gnu.org>
* Makefile.in (INFO_EXT): Remove and replace by ".info" throughout.
diff --git a/doc/emacs/Makefile.in b/doc/emacs/Makefile.in
index 6bf8302a2a..ffbfda7db8 100644
--- a/doc/emacs/Makefile.in
+++ b/doc/emacs/Makefile.in
@@ -181,7 +181,7 @@ emacs-xtra.dvi: $(EMACS_XTRA)
emacs-xtra.pdf: $(EMACS_XTRA)
$(ENVADD) $(TEXI2PDF) ${srcdir}/emacs-xtra.texi
-.PHONY: mostlyclean clean distclean maintainer-clean infoclean
+.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean infoclean
## Temp files.
mostlyclean:
@@ -203,7 +203,7 @@ infoclean:
$(buildinfodir)/emacs.info-[1-9] \
$(buildinfodir)/emacs.info-[1-9][0-9]
-maintainer-clean: distclean infoclean
+bootstrap-clean maintainer-clean: distclean infoclean
.PHONY: dist
diff --git a/doc/lispintro/ChangeLog b/doc/lispintro/ChangeLog
index 4c549f9c8b..318daf3e7a 100644
--- a/doc/lispintro/ChangeLog
+++ b/doc/lispintro/ChangeLog
@@ -1,3 +1,7 @@
+2014-06-15 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (bootstrap-clean): New.
+
2014-06-10 Glenn Morris <rgm@gnu.org>
* Makefile.in (INFO_EXT): Remove and replace by ".info" throughout.
diff --git a/doc/lispintro/Makefile.in b/doc/lispintro/Makefile.in
index 0055408c4a..08506cfbc7 100644
--- a/doc/lispintro/Makefile.in
+++ b/doc/lispintro/Makefile.in
@@ -101,7 +101,7 @@ emacs-lisp-intro.pdf: ${srcs}
emacs-lisp-intro.html: ${srcs}
$(MAKEINFO) $(MAKEINFO_OPTS) $(HTML_OPTS) -o $@ ${srcdir}/emacs-lisp-intro.texi
-.PHONY: mostlyclean clean distclean maintainer-clean infoclean
+.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean infoclean
mostlyclean:
rm -f *.aux *.log *.toc *.cp *.cps *.fn *.fns *.ky *.kys \
@@ -119,7 +119,7 @@ infoclean:
$(buildinfodir)/eintr.info \
$(buildinfodir)/eintr.info-[1-9]
-maintainer-clean: distclean infoclean
+bootstrap-clean maintainer-clean: distclean infoclean
.PHONY: dist
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index f7c0d14abb..4089068c90 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,7 @@
+2014-06-15 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (bootstrap-clean): New.
+
2014-06-15 Eli Zaretskii <eliz@gnu.org>
* commands.texi (Accessing Mouse): Improve the wording of the
diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in
index 2fbba4d0d5..c97ce97c9f 100644
--- a/doc/lispref/Makefile.in
+++ b/doc/lispref/Makefile.in
@@ -153,7 +153,7 @@ elisp.html: $(srcs)
elisp.pdf: $(srcs)
$(ENVADD) $(TEXI2PDF) $(srcdir)/elisp.texi
-.PHONY: mostlyclean clean distclean maintainer-clean infoclean
+.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean infoclean
## [12] stuff is from two-volume.make.
mostlyclean:
@@ -175,7 +175,7 @@ infoclean:
$(buildinfodir)/elisp.info-[1-9] \
$(buildinfodir)/elisp.info-[1-9][0-9]
-maintainer-clean: distclean infoclean
+bootstrap-clean maintainer-clean: distclean infoclean
.PHONY: dist
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index 2ded8898fd..6e641f1dd1 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -1,3 +1,7 @@
+2014-06-15 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (bootstrap-clean): New.
+
2014-06-12 Vincent Belaïche <vincentb1@users.sourceforge.net>
* ses.texi: Adding documentation for SES local printer functions.
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in
index 9e036c43ad..d191534c2d 100644
--- a/doc/misc/Makefile.in
+++ b/doc/misc/Makefile.in
@@ -209,7 +209,7 @@ ${buildinfodir}/tramp.info tramp.html: EXTRA_OPTS = -D emacs
${buildinfodir}/tramp.info tramp.html: ${srcdir}/trampver.texi
-.PHONY: mostlyclean clean distclean maintainer-clean
+.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean
mostlyclean:
rm -f *.aux *.log *.toc *.c[mp] *.c[mp]s *.fn *.fns \
@@ -235,7 +235,7 @@ infoclean:
$(buildinfodir)/$${file}-[1-9][0-9]; \
done
-maintainer-clean: distclean infoclean
+bootstrap-clean maintainer-clean: distclean infoclean
dist:
rm -rf emacs-misc-${version}
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index 2586cfdd39..74cdf05177 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,3 +1,7 @@
+2014-06-15 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (bootstrap-clean): New.
+
2014-06-13 Glenn Morris <rgm@gnu.org>
* Makefile.in (../lib/libgnu.a):
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index c7183fe751..2de6411392 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -255,7 +255,7 @@ $(DESTDIR)${archlibdir}: all
fi
.PHONY: install uninstall mostlyclean clean distclean maintainer-clean
-.PHONY: extraclean check tags
+.PHONY: bootstrap-clean extraclean check tags
install: $(DESTDIR)${archlibdir}
@echo
@@ -289,7 +289,7 @@ distclean: clean
-rm -f TAGS
-rm -f Makefile blessmail
-maintainer-clean: distclean
+bootstrap-clean maintainer-clean: distclean
true
extraclean: maintainer-clean
diff --git a/lib/Makefile.am b/lib/Makefile.am
index f76d0d3928..cda96811eb 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -16,3 +16,7 @@ include gnulib.mk
libgnu_a_SOURCES += openat-die.c save-cwd.c
endif
+
+.PHONY: bootstrap-clean
+
+bootstrap-clean: maintainer-clean
diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog
index c62b72ab9a..6af0b41974 100644
--- a/lwlib/ChangeLog
+++ b/lwlib/ChangeLog
@@ -1,3 +1,9 @@
+2014-06-15 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (mostlyclean, clean, distclean, maintainer-clean):
+ Declare as PHONY.
+ (bootstrap-clean): New.
+
2014-06-13 Glenn Morris <rgm@gnu.org>
* Makefile.in ($(globals_h)):
diff --git a/lwlib/Makefile.in b/lwlib/Makefile.in
index 145f6ec56c..f8f6fe2c9d 100644
--- a/lwlib/Makefile.in
+++ b/lwlib/Makefile.in
@@ -91,13 +91,16 @@ lwlib-Xm.o: $(src_h) lwlib-Xm.c lwlib-Xm.h lwlib.h lwlib-int.h lwlib-utils.h
xlwmenu.o: $(src_h) xlwmenu.c xlwmenu.h lwlib.h xlwmenuP.h \
$(srcdir)/../src/xterm.h
-mostlyclean:
+
+.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean
+
+clean mostlyclean:
rm -f *.o liblw.a \#*
-clean: mostlyclean
distclean: clean
rm -f Makefile
-maintainer-clean: distclean
+
+bootstrap-clean maintainer-clean: distclean
rm -f TAGS
diff --git a/nextstep/ChangeLog b/nextstep/ChangeLog
index ad869f1a19..a3d9b3aa28 100644
--- a/nextstep/ChangeLog
+++ b/nextstep/ChangeLog
@@ -1,3 +1,7 @@
+2014-06-15 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (bootstrap-clean): New.
+
2014-03-13 Glenn Morris <rgm@gnu.org>
* templates/Info.plist.in: Make it strictly valid xml. (Bug#17002)
diff --git a/nextstep/Makefile.in b/nextstep/Makefile.in
index fe570d13ee..4198fb2945 100644
--- a/nextstep/Makefile.in
+++ b/nextstep/Makefile.in
@@ -52,7 +52,7 @@ ${ns_appbindir}/Emacs: ${ns_appdir} ${ns_check_file} ../src/emacs${EXEEXT}
all: ${ns_appdir} ${ns_appbindir}/Emacs
-.PHONY: clean distclean maintainer-clean
+.PHONY: clean distclean bootstrap-clean maintainer-clean
clean:
rm -rf ${ns_appdir}
@@ -64,6 +64,6 @@ distclean: clean
Cocoa/Emacs.base/Contents/Info.plist \
Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings
-maintainer-clean: distclean
+bootstrap-clean maintainer-clean: distclean
### Makefile.in ends here
diff --git a/nt/ChangeLog b/nt/ChangeLog
index cbbb581476..87274b331a 100644
--- a/nt/ChangeLog
+++ b/nt/ChangeLog
@@ -1,3 +1,7 @@
+2014-06-15 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (bootstrap-clean): New.
+
2014-06-05 Dmitry Antipov <dmantipov@yandex.ru>
* inc/ms-w32.h (POLL_FOR_INPUT): Define with HAVE_WINDOW_SYSTEM.
diff --git a/nt/Makefile.in b/nt/Makefile.in
index a7fc110108..86d313ac2a 100644
--- a/nt/Makefile.in
+++ b/nt/Makefile.in
@@ -162,7 +162,7 @@ $(DESTDIR)${archlibdir}: all
fi
.PHONY: install uninstall mostlyclean clean distclean maintainer-clean
-.PHONY: extraclean check tags
+.PHONY: bootstrap-clean extraclean check tags
install: $(DESTDIR)${archlibdir}
@echo
@@ -193,7 +193,7 @@ distclean: clean
-rm -f TAGS
-rm -f Makefile
-maintainer-clean: distclean
+bootstrap-clean maintainer-clean: distclean
true
extraclean: maintainer-clean
diff --git a/oldXMenu/ChangeLog b/oldXMenu/ChangeLog
index 906fe229a0..f3736cdacf 100644
--- a/oldXMenu/ChangeLog
+++ b/oldXMenu/ChangeLog
@@ -1,3 +1,9 @@
+2014-06-15 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (mostlyclean, clean, distclean, maintainer-clean, tags):
+ Declare as PHONY.
+ (boostrap-clean): New.
+
2013-10-24 Glenn Morris <rgm@gnu.org>
* Makefile.in (abs_top_srcdir): New, set by configure.
diff --git a/oldXMenu/Makefile.in b/oldXMenu/Makefile.in
index c1fdd8244e..537be826d1 100644
--- a/oldXMenu/Makefile.in
+++ b/oldXMenu/Makefile.in
@@ -134,14 +134,17 @@ XDestAssoc.o: XDestAssoc.c X10.h
XMakeAssoc.o: XMakeAssoc.c X10.h
insque.o: insque.c
-FRC.mostlyclean:
-mostlyclean: FRC.mostlyclean
+.PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean
+
+mostlyclean:
rm -f libXMenu11.a ${OBJS} ${EXTRA}
+
clean: mostlyclean
-distclean: clean
+
+boostrap-clean maintainer-clean distclean: clean
rm -f Makefile
-maintainer-clean: distclean
+.PHONY: tags
tags:
$(TAGS) -t *.[ch]
-.PHONY: tags
+