jw-pkg/make/dirs.mk

105 lines
2.6 KiB
Makefile
Raw Normal View History

# generic utility modules
# (c) 2001 jannet it services
# contact@jannet.de
# $Id$
ALLOWED_SUBDIR_TARGETS ?= all install clean distclean test link-in
reverse = $(if $(wordlist 2,2,$(1)),$(call reverse,$(wordlist 2,$(words $(1)),$(1))) $(firstword $(1)),$(1))
.NOTPARALLEL:
.PHONY: $(SUBDIRS_TO_ITERATE) $(ALLOWED_SUBDIR_TARGETS)
ifneq ($(FORCE_REBUILD_SUBDIRS),)
.PHONY: dirs-all.done
endif
include $(MODDIR)/make/defs.mk
SUBDIRS ?= $(ORDERED_SUBDIRS) $(filter-out $(ORDERED_SUBDIRS),$(FIND_SUBDIRS))
#SUBDIRS ?= $(filter-out $(ORDERED_SUBDIRS),$(FIND_SUBDIRS))
#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
2011-06-15 10:12:37 +00:00
all: dirs-all.done
install: dirs-install.done
clean: dirs.clean
distclean: dirs.clean dirs.distclean
subdirs-%:
FORCE_REBUILD_SUBDIRS=true make $*
local-%:
FORCE_REBUILD_SUBDIRS=true DONT_CHECK_PREREQ_DONE=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:
2011-06-20 07:47:23 +00:00
@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:
touch dirs-started-all.done
set -e; for d in $(SUBDIRS) ; do make -wC $$d $*; done
ifneq ($(DONT_CHECK_PREREQ_DONE),true)
touch $@
endif
ifeq ($(filter clean distclean,$(MAKECMDGOALS)),)
dirs-all.done: $(wildcard $(BUILD_HDRDIR)/*.h) $(wildcard $(BUILD_HDRDIR)/$(HDRDIR_SCOPE_PREFIX)/*.h)
endif
2011-06-15 10:12:37 +00:00
dirs-%.done:
touch dirs-started-$*.done
2011-06-15 10:12:37 +00:00
set -e; for d in $(SUBDIRS) ; do make -wC $$d $*; done
ifneq ($(DONT_CHECK_PREREQ_DONE),true)
touch $@
endif
ifeq ($(DEVELOPMENT),true)
ifeq ($(SUBDIR_TARGETS),all)
dirs-all.done: $(PREREQ_DIRS_DONE)
endif
ifeq ($(SUBDIR_TARGETS),install)
dirs-all.done: $(PREREQ_DIRS_DONE)
endif
2011-06-15 10:12:37 +00:00
dirs-install.done: dirs-all.done
endif
2011-06-15 10:12:37 +00:00
dirs.clean:
set -e; for d in $(call reverse,$(SUBDIRS)) ; do make -wC $$d clean; done
$(RM) -rf $(TEXTCLEAN) $(CLEAN) *.done *~ .*.swp *.tmp core *.rep dirs-*.done
dirs.distclean:
set -e; for d in $(call reverse,$(SUBDIRS)) ; do make -wC $$d distclean; done
$(RM) -rf $(DISTCLEAN)
2002-07-25 10:39:55 +00:00
endif # SUBDIRS_TO_ITERATE