X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=subdirmk%2Fregen.mk.in;h=a6d9ad2544837b83b5d2ee2386b1328fe69cb430;hb=b48380652d2974f9d615a5c942a82f3dfb002ca3;hp=e2944f08ffd3f8b8f7265639e38d0ba54c1ab399;hpb=4800c931218887da8996d827a9351335e1e7e5f1;p=subdirmk.git diff --git a/subdirmk/regen.mk.in b/subdirmk/regen.mk.in index e2944f0..a6d9ad2 100644 --- a/subdirmk/regen.mk.in +++ b/subdirmk/regen.mk.in @@ -1,10 +1,14 @@ +# subdirmk - rules for regenerating makefiles etc. +# Copyright 2019 Mark Wooding +# Copyright 2019 Ian Jackson +# SPDX-License-Identifier: LGPL-2.0-or-later CONFIGURE ?= configure -CONFIGURE_AC ?= $(CONFIGURE).ac -CONFIG_STATUS ?= config.status +CONFIGURE_AC ?= $(CONFIGURE).ac +CONFIG_STATUS ?= config.status -CONFIGURE_ACS += $(CONFIGURE_AC) -CONFIGURE_ACS += subdirmk/subdirmk.ac +CONFIGURE_ACS += $(CONFIGURE_AC) +CONFIGURE_ACS += subdirmk/subdirmk.ac $(top_srcdir)/$(CONFIGURE): $(addprefix $(top_srcdir)/,$(CONFIGURE_ACS)) cd $(top_srcdir) && autoconf @@ -12,23 +16,36 @@ $(top_srcdir)/$(CONFIGURE): $(addprefix $(top_srcdir)/,$(CONFIGURE_ACS)) $(CONFIG_STATUS): $(top_srcdir)/$(CONFIGURE) ./$(CONFIG_STATUS) --recheck -MAKEFILES += subdirmk/regen.mk +# Normally, generate will add all the inputs to MAKEFILE_TEMPLATES. +MAKEFILE_TEMPLATES += $(addprefix $(top_srcdir)/, $(addsuffix .in, \ + @_SUBDIRMK_MAKEFILES@ \ + )) main.mk $(MAKEFILES): .makefiles.stamp ; -.makefiles.stamp: \ +.makefiles.stamp: \ $(top_srcdir)/subdirmk/generate \ $(CONFIG_STATUS) \ - $(top_srcdir)/Perdir.mk.in \ - $(foreach m,$(MAKEFILES),$(top_srcdir)/$(m).in) - : $? X $(filter-out Subdir.mk.in regen.mk.in, $(notdir $?)) + $(MAKEFILE_TEMPLATES) +# 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 regen.mk.in, $(notdir $?)),, \ - $(patsubst %.mk.in,%.mk,$(filter %.mk.in,$?))) + $(filter-out Subdir.sd.mk %/Subdir.sd.mk \ + %.mk.in \ + , $?),, \ + $(patsubst $(top_srcdir)/%,%, $(sort \ + $(patsubst %.sd.mk,%.mk,$(filter %.sd.mk,$?)) \ + $(patsubst %.mk.in,%.mk,$(filter %.mk.in,$?))))) touch $@ realclean:: clean $(RM) config.status config.log - $(RM) main.mk subdirmk/regen.mk $(MAKEFILES) + $(RM) main.mk $(MAKEFILES) @_SUBDIRMK_MAKEFILES@ $(RM) $(addsuffix Makefile,$(dir $(MAKEFILES))) -include $(ALL_DEPFILES)