summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common.bottom.mk116
-rw-r--r--common.top.mk22
2 files changed, 78 insertions, 60 deletions
diff --git a/common.bottom.mk b/common.bottom.mk
index 2d56297..4a5833c 100644
--- a/common.bottom.mk
+++ b/common.bottom.mk
@@ -19,98 +19,116 @@ include $(topsrcdir)/common.each.mk
# Aggregate variables
# Add some more defaults to the *_files variables
-clean_files += $(obj_files)
-conf_files += Makefile $(topobjdir)/config.mk
+clean_files += $(out_files)
+conf_files += Makefile $(topoutdir)/config.mk
# Now namespace the *_files variables
-$(module)_src_files := $(addprefix $(srcdir)/,$(src_files))
-$(module)_obj_files := $(addprefix $(objdir)/,$(obj_files))
-$(module)_sys_files := $(addprefix $(DESTDIR)/,$(sys_files))
-$(module)_clean_files := $(addprefix $(objdir)/,$(clean_files))
-$(module)_slow_files := $(addprefix $(objdir)/,$(slow_files))
-$(module)_conf_files := $(addprefix $(objdir)/,$(conf_files))
-$(module)_dist_files := $(addprefix $(srcdir)/,$(dist_files))
+define _am_add_to_module
+_am_$(module)_src_files = $(addprefix $(srcdir)/,$(src_files))
+_am_$(module)_out_files = $(addprefix $(outdir)/,$(out_files))
+_am_$(module)_sys_files = $(addprefix $(DESTDIR),$(sys_files))
+_am_$(module)_clean_files = $(addprefix $(outdir)/,$(clean_files))
+_am_$(module)_slow_files = $(addprefix $(outdir)/,$(slow_files))
+_am_$(module)_conf_files = $(addprefix $(outdir)/,$(conf_files))
+_am_$(module)_dist_files = $(addprefix $(srcdir)/,$(dist_files))
+endef
+$(eval $(_am_add_to_module))
# And add them to the $(parent)_*_files variables (if applicable)
+define _am_add_to_parent
+_am_%(parent)_src_files += $(_am_%(module)_src_files)
+_am_%(parent)_out_files += $(_am_%(module)_out_files)
+_am_%(parent)_sys_files += $(_am_%(module)_sys_files)
+_am_%(parent)_clean_files += $(_am_%(module)_clean_files)
+_am_%(parent)_slow_files += $(_am_%(module)_slow_files)
+_am_%(parent)_conf_files += $(_am_%(module)_conf_files)
+_am_%(parent)_dist_files += $(_am_%(module)_dist_files)
+endef
ifneq ($(parent),)
-$(parent)_src_files := $($(parent)_src_files) $($(module)_src_files)
-$(parent)_obj_files := $($(parent)_obj_files) $($(module)_obj_files)
-$(parent)_sys_files := $($(parent)_sys_files) $($(module)_sys_files)
-$(parent)_clean_files := $($(parent)_clean_files) $($(module)_clean_files)
-$(parent)_slow_files := $($(parent)_slow_files) $($(module)_slow_files)
-$(parent)_conf_files := $($(parent)_conf_files) $($(module)_conf_files)
-$(parent)_dist_files := $($(parent)_dist_files) $($(module)_dist_files)
+$(eval $(subst %(parent),$(parent),$(subst %(module),$(module),$(value _am_add_to_parent))))
endif
modules := $(modules) $(module)
+# Do some per-module magic
+
+_am_phony = build install uninstall mostlyclean clean distclean maintainer-clean check
+
+.PHONY: $(addsuffix -%(module),$(_am_phony))
+
+$(addsuffix -$(module),uninstall mostlyclean clean distclean maintainer-clean) ::
+ $(RM) -- $(sort $(_am_$@))
+ $(RMDIRS) $(sort $(dir $(_am_$@))) 2>/dev/null || $(TRUE)
+
+
# Include Makefiles from other directories
-define _nl
+define _am_nl
endef
-define _include_makefile
+define _am_include_makefile
ifeq ($(filter $(abspath $1),$(included_makefiles)),)
-include $(if $(call _is_subdir,.,$1),$(call _relto,.,$1),$(topobjdir)/$(call _relto,$(topobjdir),$1))
+include $(if $(call _am_is_subdir,.,$1),$(call _am_relto,.,$1),$(topoutdir)/$(call _am_relto,$(topoutdir),$1))
endif
endef
$(eval \
- _COMMON_MK_NOONCE = n$(_nl)\
- $(foreach dir,$(subdirs),parent=$(module)$(_nl)$(call _include_makefile,$(objdir)/$(dir)/Makefile)$(_nl))\
- parent=dep$(_nl)\
- $(call _include_makefile,$(topobjdir)/$(dir)/Makefile)$(_nl)\
- _COMMON_MK_NOONCE = $(_COMMON_MK_NOONCE))
+ _am_NO_ONCE = y$(_am_nl)\
+ $(foreach dir,$(subdirs),parent=$(module)$(_am_nl)$(call _am_include_makefile,$(outdir)/$(dir)/Makefile)$(_am_nl))\
+ parent=dep$(_am_nl)\
+ $(call _am_include_makefile,$(topoutdir)/$(dir)/Makefile)$(_am_nl)\
+ _am_NO_ONCE = $(_am_NO_ONCE))
# This only gets evaluated once, after all of the other Makefiles are read
-ifeq ($(_COMMON_MK_NOONCE),)
+ifeq ($(_am_NO_ONCE),)
# Empty module-level variables
-objdir = /bogus
+outdir = /bogus
srcdir = /bogus
subdirs =
depdirs =
src_files =
-obj_files =
+out_files =
sys_files =
clean_files =
slow_files =
conf_files =
dist_files =
-# Declare phony targets
-.phony = build install uninstall mostlyclean clean distclean maintainer-clean check
-define module_rules
-.PHONY: $(addsuffix -%(module),$(.phony))
+ifeq ($(abspath .),$(abspath $(topoutdir)))
+_am_all_clean_files += $(topoutdir)/$(PACKAGE)-$(VERSION).tar.gz
+$(addsuffix -all,mostlyclean clean distclean maintainer-clean) ::
+ $(RM) -r -- $(topoutdir)/$(PACKAGE)-$(VERSION)
+endif
+
+define _am_module_rules
# Constructive phony targets
-build-%(module): $(%(module)_obj_files)
-install-%(module): $(%(module)_sys_files)
+build-%(module): $(_am_%(module)_out_files)
+install-%(module): $(_am_%(module)_sys_files)
# Destructive phony targets
-_%(module)_uninstall = $(%(module)_sys_files))
-_%(module)_mostlyclean = $(filter-out $(%(module)_slow_files) $(%(module)_conf_files) $(%(module)_dist_files),$(%(module)_clean_files))
-_%(module)_clean = $(filter-out $(%(module)_conf_files) $(%(module)_dist_files),$(%(module)_clean_files))
-_%(module)_distclean = $(filter-out $(%(module)_dist_files),$(%(module)_clean_files))
-_%(module)_maintainer-clean = $(%(module)_clean_files)
-uninstall-%(module) mostlyclean-%(module) clean-%(module) distclean-%(module) maintainer-clean-%(module): %-%(module):
- $(RM) -- $(sort $(_%(module)_$*))
- $(RMDIRS) $(sort $(dir $(_%(module)_$*))) 2>/dev/null || $(TRUE)
+_am_uninstall-%(module) = $(_am_%(module)_sys_files))
+_am_mostlyclean-%(module) = $(filter-out $(_am_%(module)_slow_files) $(_am_%(module)_conf_files) $(_am_%(module)_dist_files),$(_am_%(module)_clean_files))
+_am_clean-%(module) = $(filter-out $(_am_%(module)_conf_files) $(_am_%(module)_dist_files),$(_am_%(module)_clean_files))
+_am_distclean-%(module) = $(filter-out $(_am_%(module)_dist_files),$(_am_%(module)_clean_files))
+_am_maintainer-clean-%(module) = $(_am_%(module)_clean_files)
endef
-$(foreach module,$(modules),$(eval $(subst %(module),$(module),$(value module_rules))))
+$(foreach module,$(modules),$(eval $(subst %(module),$(module),$(value _am_module_rules))))
# Alias each bare phony target to itself with the `-all` suffix
-$(foreach t,$(.phony),$(eval $t: $t-all))
+$(foreach t,$(_am_phony),$(eval $t: $t-all))
# Add the `dist` target
.PHONY: dist
-dist: $(topobjdir)/$(PACKAGE)-$(VERSION).tar.gz
-$(topobjdir)/$(PACKAGE)-$(VERSION).tar.gz: $(topobjdir)/$(PACKAGE)-$(VERSION)
+dist: $(topoutdir)/$(PACKAGE)-$(VERSION).tar.gz
+$(topoutdir)/$(PACKAGE)-$(VERSION).tar.gz: $(topoutdir)/$(PACKAGE)-$(VERSION)
$(TAR) czf $@ -C $(<D) $(<F)
-_copyfile = $(MKDIRS) $(dir $2) && $(CP) $1 $2
-_addfile = $(call _copyfile,$3,$2/$(call _relto,$1,$3))
-$(topobjdir)/$(PACKAGE)-$(VERSION): $(all_src_files) $(dep_src_files) $(all_dist_files) $(dep_dist_files)
+_am_copyfile = $(MKDIRS) $(dir $2) && $(CP) $1 $2
+_am_addfile = $(call _am_copyfile,$3,$2/$(call _am_relto,$1,$3))
+$(topoutdir)/$(PACKAGE)-$(VERSION): $(_am_all_src_files) $(_am_dep_src_files) $(_am_all_dist_files) $(_am_dep_dist_files)
$(RM) -r $@
+ @PS4='' && set -x && \
$(MKDIR) $(@D)/tmp.$(@F).$$$$ && \
- $(foreach f,$^,$(call _addfile,$(topsrcdir),$(@D)/tmp.$(@F).$$$$,$f) &&) \
+ $(foreach f,$^,$(call _am_addfile,$(topsrcdir),$(@D)/tmp.$(@F).$$$$,$f) &&) \
$(MV) $(@D)/tmp.$(@F).$$$$ $@ || $(RM) -r $(@D)/tmp.$(@F).$$$$
include $(topsrcdir)/common.once.mk
diff --git a/common.top.mk b/common.top.mk
index a83abb6..9a2fa0a 100644
--- a/common.top.mk
+++ b/common.top.mk
@@ -14,32 +14,32 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Both of these have the argument order "parent,child"
-_noslash = $(patsubst %/,%,$1)
-_relto = $(call _noslash,$(patsubst $(abspath $1)/%,%,$(abspath $2)/))
-_is_subdir = $(filter $(abspath $1)/%,$(abspath $2)/)
+_am_noslash = $(patsubst %/,%,$1)
+_am_relto = $(call _am_noslash,$(patsubst $(abspath $1)/%,%,$(abspath $2)/))
+_am_is_subdir = $(filter $(abspath $1)/%,$(abspath $2)/)
## Declare the standard targets
all: build
.PHONY: all
-## Set topobjdir, objdir, and srcdir (assumes that topsrcdir is already set)
-ifeq ($(topobjdir),)
-topobjdir := $(call _noslash,$(dir $(lastword $(filter %/config.mk config.mk,$(MAKEFILE_LIST)))))
+## Set topoutdir, outdir, and srcdir (assumes that topsrcdir is already set)
+ifeq ($(topoutdir),)
+topoutdir := $(call _am_noslash,$(dir $(lastword $(filter %/config.mk config.mk,$(MAKEFILE_LIST)))))
endif
- objdir := $(call _noslash,$(dir $(lastword $(filter-out %.mk,$(MAKEFILE_LIST)))))
- srcdir := $(firstword $(call _relto,., $(topsrcdir)/$(call _relto,$(topobjdir),$(objdir)) ) .)
+ outdir := $(call _am_noslash,$(dir $(lastword $(filter-out %.mk,$(MAKEFILE_LIST)))))
+ srcdir := $(firstword $(call _am_relto,., $(topsrcdir)/$(call _am_relto,$(topoutdir),$(outdir)) ) .)
-included_makefiles := $(included_makefiles) $(abspath $(objdir)/Makefile)
+included_makefiles := $(included_makefiles) $(abspath $(outdir)/Makefile)
## Set module name
-module := $(subst /,_,$(if $(call _is_subdir,.,$(objdir)),$(firstword $(call _relto,.,$(objdir)) all),dep-$(firstword $(call _relto,$(topobjdir),$(objdir)) top)))
+module := $(subst /,_,$(if $(call _am_is_subdir,.,$(outdir)),$(firstword $(call _am_relto,.,$(outdir)) all),dep-$(firstword $(call _am_relto,$(topoutdir),$(outdir)) top)))
## Empty variables for use by the module
subdirs =
depdirs =
src_files =
-obj_files =
+out_files =
sys_files =
clean_files =