X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?p=subdirmk.git;a=blobdiff_plain;f=subdirmk%2Fregen.mk.in;h=7e9f0cf108c98f45e997973f2e3ba627279e74ab;hp=f7a72192aa8c31319ffd20ba5164da92e2faf071;hb=ffddf030906bbf75b80acaf03043c46d1bba7dc1;hpb=9d3365682de5aabe3003fa7af54cfec0d099905a diff --git a/subdirmk/regen.mk.in b/subdirmk/regen.mk.in index f7a7219..7e9f0cf 100644 --- a/subdirmk/regen.mk.in +++ b/subdirmk/regen.mk.in @@ -14,17 +14,31 @@ $(CONFIG_STATUS): $(top_srcdir)/$(CONFIGURE) MAKEFILES += subdirmk/regen.mk -main.mk $(MAKEFILES): makefiles.phantom ; -.INTERMEDIATE: makefiles.phantom -makefiles.phantom: \ +main.mk $(MAKEFILES): .makefiles.stamp ; +.makefiles.stamp: \ $(top_srcdir)/subdirmk/generate \ $(CONFIG_STATUS) \ $(top_srcdir)/Perdir.mk.in \ $(foreach m,$(MAKEFILES),$(top_srcdir)/$(m).in) - ./$(CONFIG_STATUS) - -realclean: clean +# This filtering arranges that we can often run config.status to +# generate only particular output files. We look for *inputs* that +# have changed. If the only inputs that have changed are ones that we +# know affect only one output (Subdir.mk.in and regen.mk.in), we pass +# config.status the corresponding output file names. Otherwise we +# pass nothing and config.status does them all. We need to mention +# regen.mk.in twice because if $(top_srcdir) is `.', make elides the +# directory part from $?. + ./$(CONFIG_STATUS) $(if \ + $(filter-out Subdir.mk.in %/Subdir.mk.in \ + subdirmk/regen.mk.in \ + $(top_srcdir)/subdirmk/regen.mk.in \ + , $?),, \ + $(patsubst %.mk.in,%.mk,$(filter %.mk.in,$?))) + touch $@ + +realclean:: clean $(RM) config.status config.log - $(RM) main.mk $(MAKEFILES) + $(RM) main.mk subdirmk/regen.mk $(MAKEFILES) + $(RM) $(addsuffix Makefile,$(dir $(MAKEFILES))) -include $(ALL_DEPFILES)