aboutsummaryrefslogtreecommitdiffstats
path: root/include/subdir.mk
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2007-07-28 02:44:55 +0000
committerFelix Fietkau <nbd@openwrt.org>2007-07-28 02:44:55 +0000
commit81529c47ec26f951a849c54922db22f38848ed95 (patch)
treeb468d3dd463ba5b6d2a35ef630b23eec4d4f6489 /include/subdir.mk
parentf1b2dbceb2dfb162db1dc76cfd71d53eba7fa7be (diff)
downloadupstream-81529c47ec26f951a849c54922db22f38848ed95.tar.gz
upstream-81529c47ec26f951a849c54922db22f38848ed95.tar.bz2
upstream-81529c47ec26f951a849c54922db22f38848ed95.zip
initial attempt at cleaning up subdirectory handling. tools/Makefile is now being included instead of recursively called
SVN-Revision: 8201
Diffstat (limited to 'include/subdir.mk')
-rw-r--r--include/subdir.mk63
1 files changed, 63 insertions, 0 deletions
diff --git a/include/subdir.mk b/include/subdir.mk
new file mode 100644
index 0000000000..81a6f2a428
--- /dev/null
+++ b/include/subdir.mk
@@ -0,0 +1,63 @@
+# debug flags:
+#
+# d: show subdirectory tree
+# t: show added targets
+# l: show legacy targets
+
+ifeq ($(DEBUG),all)
+ build_debug:=dt
+else
+ build_debug:=$(DEBUG)
+endif
+
+define debug
+$$(findstring $(2),$$(if $$(DEBUG_DIR),$$(if $$(filter $$(DEBUG_DIR)%,$(1)),$(build_debug)),$(build_debug)))
+endef
+
+define warn
+$$(if $(call debug,$(1),$(2)),$$(warning $(3)))
+endef
+
+define warn_eval
+$(call warn,$(1),$(2),$(3) $(4))
+$(4)
+endef
+
+dep/compile=$(1)/prepare
+dep/install=$(1)/compile
+SUBTARGETS:=clean download prepare compile install update refresh prereq
+
+# Parameters: <subdir>
+define subdir
+ $(call warn,$(1),d,D $(1))
+ $(foreach bd,$($(1)/builddirs),
+ $(call warn,$(1),d,BD $(1)/$(bd))
+ $(foreach target,$(SUBTARGETS),
+ $(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(target): $(call dep/$(target),$(1)/$(bd)) $($(1)/$(bd)/$(target)) $($(1)//$(target)))
+ @$$(MAKE) -j1 -C $(1)/$(bd) $(target)
+
+ # legacy targets
+ $(call warn_eval,$(1)/$(bd),l,T,$(1)/$(bd)-$(target): $(1)/$(bd)/$(target))
+ )
+ )
+ $(foreach target,$(SUBTARGETS),
+ $(call warn_eval,$(1),t,T,$(1)/$(target): $($(1)/) $(foreach bd,$($(1)/builddirs),$(1)/$(bd)/$(target)))
+ )
+endef
+
+# Parameters: <subdir> <name>
+define stampfile
+ $(1)/stamp:=$(STAGING_DIR)/stampfiles/.$(2)_installed
+ $(call rdep,$(1),$$($(1)/stamp))
+
+ $$($(1)/stamp):
+ @$(MAKE) $(1)/install
+ @mkdir -p $$$$(dirname $$($(1)/stamp))
+ @touch $$($(1)/stamp)
+ .PRECIOUS: $$($(1)/stamp) # work around a make bug
+
+ $(1)//clean:=$(1)/stamp/clean
+ $(1)/stamp/clean: FORCE
+ @rm -f $$($(1)/stamp)
+
+endef