From bf8cf95d7d13ebc5d351cc2a8048f6695ab9faca Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 21 Mar 2017 09:59:10 -0700 Subject: [PATCH] Streamline dependency-file generation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * configure.ac (AUTODEPEND_PARENTS): New var. mkdir the dependency directories here, to simplify ‘make’. Remove dependency files just before outputting Makefiles, so that they are preserved if ‘configure’ exits early due to some other problem. * lib/Makefile.in, lwlib/Makefile.in, oldXMenu/Makefile.in: * src/Makefile.in: Adjust deps strategies to be similar, as follows: (MKDEPDIR): Remove. All uses removed. This cuts down on the number of processes spun off by ‘make’. (clean mostlyclean): Remove $(DEPDIR) contents, not $(DEPDIR) itself. (distclean): Remove $(DEPDIR) itself. * lwlib/Makefile.in (all): Move to front, so that depdir includes do not alter default action. --- configure.ac | 13 ++++++++++--- lib/Makefile.in | 10 ++-------- lwlib/Makefile.in | 28 ++++++++++------------------ oldXMenu/Makefile.in | 22 +++++++--------------- src/Makefile.in | 25 +++++++------------------ 5 files changed, 36 insertions(+), 62 deletions(-) diff --git a/configure.ac b/configure.ac index 48fcb3f33aa..833aaa5eb27 100644 --- a/configure.ac +++ b/configure.ac @@ -1730,6 +1730,7 @@ dnl AC_C_BIGENDIAN is done by gnulib. dnl check for Make feature AUTO_DEPEND=no +AUTODEPEND_PARENTS='lib src' dnl check if we have GCC and autodepend is on. if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then AC_MSG_CHECKING([whether gcc understands -MMD -MF]) @@ -1742,9 +1743,6 @@ if test "$GCC" = yes && test "$ac_enable_autodepend" = yes; then AC_MSG_RESULT([$ac_enable_autodepend]) if test $ac_enable_autodepend = yes; then AUTO_DEPEND=yes - for depdir in */deps; do - test ! -d "$depdir" || rm -fr "$depdir"/../*.o "$depdir" || exit - done fi fi AC_SUBST(AUTO_DEPEND) @@ -5016,8 +5014,10 @@ if test "$HAVE_GTK" = yes || test "$HAVE_X11" != yes; then LIBXMENU= elif test "$USE_X_TOOLKIT" = none; then LIBXMENU='$(oldXMenudir)/libXMenu11.a' + AUTODEPEND_PARENTS="$AUTODEPEND_PARENTS oldXMenu" else LIBXMENU='$(lwlibdir)/liblw.a' + AUTODEPEND_PARENTS="$AUTODEPEND_PARENTS lwlib" fi AC_SUBST(LIBXMENU) @@ -5473,6 +5473,13 @@ ${MAKE-make} -s MAKEFILE_NAME=do-not-make-Makefile etc-emacsver || \ AC_MSG_ERROR(['etc/refcards/emacsver.tex' could not be made.]) ]) +if test $AUTO_DEPEND = yes; then + for dir in $AUTODEPEND_PARENTS; do + rm -f $dir/*.o $dir/deps/* + AS_MKDIR_P([$dir/deps]) + done +fi + AC_OUTPUT if test ! "$with_mailutils"; then diff --git a/lib/Makefile.in b/lib/Makefile.in index 4e51ac6b029..832704f3a8d 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -65,16 +65,12 @@ ifneq ($(SYSTEM_TYPE),windows-nt) libgnu_a_SOURCES += openat-die.c save-cwd.c endif -# Dependencies. When !AUTO_DEPEND, don't bother with a dependencies file, -# as the default dependencies are often adequate. DEPDIR = deps ifeq ($(AUTO_DEPEND),yes) DEPFLAGS = -MMD -MF $(DEPDIR)/$*.d -MP - MKDEPDIR = $(MKDIR_P) $(DEPDIR) -include $(ALLOBJS:%.o=$(DEPDIR)/%.d) else DEPFLAGS = - MKDEPDIR = : endif .PRECIOUS: ../config.status Makefile @@ -90,10 +86,8 @@ libegnu_a_OBJECTS = $(patsubst %.o,e-%.o,$(libgnu_a_OBJECTS)) $(libegnu_a_OBJECTS) $(libgnu_a_OBJECTS): $(BUILT_SOURCES) .c.o: - @$(MKDEPDIR) $(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< e-%.o: %.c - @$(MKDEPDIR) $(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) -Demacs -o $@ $< all: libgnu.a $(if $(HYBRID_MALLOC),libegnu.a) @@ -118,10 +112,10 @@ TAGS: $(ETAGS) $(tagsfiles) .PHONY: $(ETAGS) tags clean mostlyclean: - rm -f *.[ao] \#* - -rm -rf $(DEPDIR) + rm -f *.[ao] \#* $(DEPDIR)/* distclean: clean rm -f Makefile $(BUILT_SOURCES) + rm -fr $(DEPDIR) bootstrap-clean: distclean rm -f TAGS maintainer-clean: bootstrap-clean diff --git a/lwlib/Makefile.in b/lwlib/Makefile.in index d6a8f50ce74..ee7a2040e89 100644 --- a/lwlib/Makefile.in +++ b/lwlib/Makefile.in @@ -22,6 +22,9 @@ # This was taken from the output of Imake using Lucid's Imakefile. # and set up to be configured by ../configure. +all: liblw.a +.PHONY: all + srcdir=@srcdir@ # MinGW CPPFLAGS may use this. abs_top_srcdir=@abs_top_srcdir@ @@ -71,15 +74,14 @@ am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = -DEPDIR = deps AUTO_DEPEND = @AUTO_DEPEND@ - +DEPDIR = deps ifeq ($(AUTO_DEPEND),yes) -DEPFLAGS = -MMD -MF ${DEPDIR}/$*.d -MP -MKDEPDIR = ${MKDIR_P} ${DEPDIR} + DEPFLAGS = -MMD -MF $(DEPDIR)/$*.d -MP + -include $(ALLOBJS:%.o=$(DEPDIR)/%.d) else -DEPFLAGS = -MKDEPDIR = : + DEPFLAGS = + include $(srcdir)/deps.mk endif ## ../src is where the generated file (config.h, globals.h) are. @@ -94,11 +96,7 @@ ALL_CFLAGS= $(C_SWITCH_SYSTEM) $(C_SWITCH_X_SITE) \ -Demacs -I../src \ -I$(srcdir) -I$(srcdir)/../src -I../lib -I$(srcdir)/../lib -all: liblw.a -.PHONY: all - .c.o: - @$(MKDEPDIR) $(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< liblw.a: $(OBJS) @@ -110,20 +108,14 @@ globals_h = ../src/globals.h $(globals_h): $(MAKE) -C ../src globals.h -ifeq ($(AUTO_DEPEND),yes) --include $(ALLOBJS:%.o=${DEPDIR}/%.d) -else -include $(srcdir)/deps.mk -endif - .PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean clean mostlyclean: - rm -f *.o liblw.a \#* - -rm -rf ${DEPDIR} + rm -f *.o liblw.a \#* $(DEPDIR)/* distclean: clean rm -f Makefile + rm -fr $(DEPDIR) bootstrap-clean maintainer-clean: distclean rm -f TAGS diff --git a/oldXMenu/Makefile.in b/oldXMenu/Makefile.in index 46061ab7ae4..7a5c9985920 100644 --- a/oldXMenu/Makefile.in +++ b/oldXMenu/Makefile.in @@ -111,15 +111,14 @@ am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = -DEPDIR = deps AUTO_DEPEND = @AUTO_DEPEND@ - +DEPDIR = deps ifeq ($(AUTO_DEPEND),yes) -DEPFLAGS = -MMD -MF ${DEPDIR}/$*.d -MP -MKDEPDIR = ${MKDIR_P} ${DEPDIR} + DEPFLAGS = -MMD -MF $(DEPDIR)/$*.d -MP + -include $(ALLOBJS:%.o=$(DEPDIR)/%.d) else -DEPFLAGS = -MKDEPDIR = : + DEPFLAGS = + include $(srcdir)/deps.mk endif ALL_CFLAGS=$(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) \ @@ -129,7 +128,6 @@ ALL_CFLAGS=$(C_SWITCH_SYSTEM) $(C_SWITCH_MACHINE) \ -I../src -I../lib -I${srcdir} -I${srcdir}/../src -I${srcdir}/../lib .c.o: - @$(MKDEPDIR) $(AM_V_CC)$(CC) -c ${ALL_CFLAGS} $< libXMenu11.a: $(OBJS) $(EXTRA) @@ -137,20 +135,14 @@ libXMenu11.a: $(OBJS) $(EXTRA) $(AM_V_at)$(AR) $(ARFLAGS) $@ $(OBJS) $(EXTRA) $(AM_V_at)$(RANLIB) $@ -ifeq ($(AUTO_DEPEND),yes) --include $(ALLOBJS:%.o=${DEPDIR}/%.d) -else -include $(srcdir)/deps.mk -endif - .PHONY: mostlyclean clean distclean bootstrap-clean maintainer-clean clean mostlyclean: - rm -f libXMenu11.a *.o - -rm -rf ${DEPDIR} + rm -f libXMenu11.a *.o $(DEPDIR)/* bootstrap-clean maintainer-clean distclean: clean rm -f Makefile + rm -fr $(DEPDIR) ETAGS = ../lib-src/etags${EXEEXT} diff --git a/src/Makefile.in b/src/Makefile.in index 60aa6866718..5a3d0bd0445 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -347,15 +347,14 @@ am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = -DEPDIR=deps AUTO_DEPEND = @AUTO_DEPEND@ - +DEPDIR = deps ifeq ($(AUTO_DEPEND),yes) -DEPFLAGS = -MMD -MF ${DEPDIR}/$*.d -MP -MKDEPDIR = ${MKDIR_P} ${DEPDIR} + DEPFLAGS = -MMD -MF $(DEPDIR)/$*.d -MP + -include $(ALLOBJS:%.o=$(DEPDIR)/%.d) else -DEPFLAGS = -MKDEPDIR = : + DEPFLAGS = + include $(srcdir)/deps.mk endif # Flags that might be in WARN_CFLAGS but are not valid for Objective C. @@ -383,10 +382,8 @@ ALL_OBJC_CFLAGS = $(EMACS_CFLAGS) \ .SUFFIXES: .m .c.o: - @$(MKDEPDIR) $(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $(PROFILING_CFLAGS) $< .m.o: - @$(MKDEPDIR) $(AM_V_CC)$(CC) -c $(CPPFLAGS) $(ALL_OBJC_CFLAGS) $(PROFILING_CFLAGS) $< ## lastfile must follow all files whose initialized data areas should @@ -650,8 +647,7 @@ mostlyclean: rm -f globals.h gl-stamp rm -f *.res *.tmp clean: mostlyclean - rm -f emacs-*.*.*$(EXEEXT) emacs$(EXEEXT) - -rm -rf $(DEPDIR) + rm -f emacs-*.*.*$(EXEEXT) emacs$(EXEEXT) $(DEPDIR)/* ## bootstrap-clean is used to clean up just before a bootstrap. ## It should remove all files generated during a compilation/bootstrap, @@ -666,6 +662,7 @@ bootstrap-clean: clean distclean: bootstrap-clean rm -f Makefile lisp.mk + rm -fr $(DEPDIR) maintainer-clean: distclean rm -f TAGS @@ -755,11 +752,3 @@ else endif @: Compile some files earlier to speed up further compilation. $(MAKE) -C ../lisp compile-first EMACS="$(bootstrap_exe)" - -ifeq ($(AUTO_DEPEND),yes) --include $(ALLOBJS:%.o=${DEPDIR}/%.d) -else -include $(srcdir)/deps.mk -endif - -### Makefile.in ends here