summaryrefslogtreecommitdiff
path: root/Makefile.in
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 /Makefile.in
parent90de50e27049ae19492dd9843e50618ea4ed5d14 (diff)
downloademacs-0e6929ecab39164b384c76884a7eac559a1fe9b9.tar.gz
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.
Diffstat (limited to 'Makefile.in')
-rw-r--r--Makefile.in106
1 files changed, 46 insertions, 60 deletions
diff --git a/Makefile.in b/Makefile.in
index f9bfa082b0c..d908bf16576 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 *~ \#*