X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=subdirmk%2Fregen.mk.in;h=bc05e722be1a836c525b3cc40c8ae0afb8bb512d;hb=9afe863051fe0ae9d2d4e88db5fd95071fb9e7c4;hp=2661ee18758ece403ce046528f5cc5e6fc0f8ddd;hpb=5c370689670a4401baa5bb111f136d6ec82d0547;p=subdirmk.git diff --git a/subdirmk/regen.mk.in b/subdirmk/regen.mk.in index 2661ee1..bc05e72 100644 --- a/subdirmk/regen.mk.in +++ b/subdirmk/regen.mk.in @@ -14,20 +14,29 @@ $(CONFIG_STATUS): $(top_srcdir)/$(CONFIGURE) MAKEFILES += subdirmk/regen.mk -main.mk $(MAKEFILES): .config.status.needed - ./$< -.INTERMEDIATE: .config.status.needed -.config.status.needed: \ +MAKEFILE_TEMPLATES += $(top_srcdir)/Perdir.mk.in + +main.mk $(MAKEFILES): .makefiles.stamp ; +.makefiles.stamp: \ $(top_srcdir)/subdirmk/generate \ $(CONFIG_STATUS) \ - $(top_srcdir)/Perdir.mk.in \ + $(MAKEFILE_TEMPLATES) \ $(foreach m,$(MAKEFILES),$(top_srcdir)/$(m).in) - : $? - set -e; printf >$@.tmp "#!/bin/sh\nset -e\n%s %s" \ - "./$(CONFIG_STATUS)" \ - "$(if $(filter-out %.mk.in, $?),, \ - $(patsubst %.mk.in,%.mk,$?))" ; \ - chmod +x $@.tmp; mv -f $@.tmp $@ +# 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