mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-pkg
synced 2026-01-15 12:03:31 +01:00
This commit tries to remove the necessity to call projects.py from $(TOPDIR) to speed up recursive builds over all projects yet again. This is a major undertaking. There are two variables which are filled py projects.py in $(TOPDIR): PREREQ and PREREQ_DIRS. Sadly, the latter is a path relative to $(TOPDIR)/make, so this is kind of pointless. Unless the cache is maintained in $(TOPDIR), a thing I tried to avoid. So this commit is only able to cache $(PREREQ), not $(PREREQ_DIRS), which still is a hassle. Introduced defs-dirs.mk for that, to make it accessible to make.mk, and modified all the other parts of the machinery, too. Signed-off-by: Jan Lindemann <jan@janware.com>
86 lines
1.9 KiB
Makefile
86 lines
1.9 KiB
Makefile
# generic utility modules
|
|
# (c) 2001 jannet it services
|
|
# contact@jannet.de
|
|
# $Id$
|
|
|
|
.NOTPARALLEL:
|
|
.PHONY: $(SUBDIRS_TO_ITERATE) $(ALLOWED_SUBDIR_TARGETS)
|
|
|
|
ifneq ($(FORCE_REBUILD_SUBDIRS),)
|
|
.PHONY: dirs-all.done
|
|
endif
|
|
|
|
include $(MODDIR)/make/defs.mk
|
|
include $(MODDIR)/make/defs-dirs.mk
|
|
|
|
ifeq ($(SUBDIRS_TO_ITERATE),)
|
|
|
|
$(ALLOWED_SUBDIR_TARGETS):
|
|
|
|
else
|
|
|
|
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:
|
|
@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 started-dirs-all.done
|
|
set -e; for d in $(SUBDIRS_TO_ITERATE) ; 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
|
|
|
|
dirs-%.done:
|
|
touch started-dirs-$*.done
|
|
set -e; for d in $(SUBDIRS_TO_ITERATE) ; 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
|
|
|
|
dirs-install.done: dirs-all.done
|
|
endif
|
|
|
|
dirs.clean:
|
|
set -e; for d in $(call reverse,$(SUBDIRS_TO_ITERATE)) ; 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_TO_ITERATE)) ; do make -wC $$d distclean; done
|
|
$(RM) -rf $(DISTCLEAN)
|
|
|
|
endif # SUBDIRS_TO_ITERATE
|