# generic utility modules # (c) 2001 jannet it services # contact@jannet.de # $Id$ ALLOWED_SUBDIR_TARGETS ?= all install clean distclean test .NOTPARALLEL: .PHONY: $(SUBDIRS_TO_ITERATE) $(ALLOWED_SUBDIR_TARGETS) ifneq ($(FORCE_REBUILD_SUBDIRS),) .PHONY: dirs-all.done endif include $(MODDIR)/make/defs.mk SUBDIRS ?= $(FIND_SUBDIRS) ifeq ($(SUBDIRS_TO_ITERATE),) $(ALLOWED_SUBDIR_TARGETS): else ifeq ($(MAKECMDGOALS),) SUBDIR_TARGETS = all else SUBDIR_TARGETS = $(filter $(ALLOWED_SUBDIR_TARGETS),$(MAKECMDGOALS)) endif ifneq ($(DONT_CHECK_PREREQ_DONE),true) PREREQ += $(call proj_query, prereq build $(PROJECT)) PREREQ_DIRS = $(foreach p, $(PREREQ), $(call proj_dir, $(p))) PREREQ_DIRS_DONE = $(addsuffix /dirs-all.done,$(filter-out $(TOPDIR) /opt/%,$(PREREQ_DIRS))) endif all: dirs-all.done install: dirs-install.done clean: dirs.clean distclean: dirs.clean dirs.distclean subdirs-%: FORCE_REBUILD_SUBDIRS=true make $* define subdir_rule $(1): dirs-$(1).done endef $(foreach t,$(filter-out all install clean distclean,$(ALLOWED_SUBDIR_TARGETS)),$(eval $(call subdir_rule,$(t)))) %/dirs-all.done: @echo $@ needs to be rebuilt ifneq ($(DONT_CHECK_PREREQ_PROJECTS),true) exit 1 endif # explicit duplication of pattern-rule is needed, otherwise .PHONY: dirs-all.done won't match dirs-all.done: set -e; for d in $(SUBDIRS) ; do make -wC $$d $*; done ifneq ($(DONT_CHECK_PREREQ_DONE),true) touch $@ endif dirs-%.done: set -e; for d in $(SUBDIRS) ; do make -wC $$d $*; done ifneq ($(DONT_CHECK_PREREQ_DONE),true) touch $@ endif ifeq ($(DEVELOPMENT),true) dirs-all.done: $(wildcard $(BUILD_HDRDIR)) ifeq ($(SUBDIR_TARGETS),all) dirs-all.done: $(PREREQ_DIRS_DONE) endif ifeq ($(SUBDIR_TARGETS),install) dirs-all.done: $(PREREQ_DIRS_DONE) endif dirs-install.done: dirs-all.done endif dirs.clean: set -e; for d in $(SUBDIRS) ; do make -wC $$d clean; done rm -rf $(TEXTCLEAN) $(CLEAN) *.done *~ .*.swp *.tmp core *.rep dirs.distclean: set -e; for d in $(SUBDIRS) ; do make -wC $$d distclean; done rm -rf $(DISTCLEAN) .DEFAULT: $(make_dirs) endif # SUBDIRS_TO_ITERATE