Revision e05804ee rules.mak

b/rules.mak
73 73

  
74 74
# will delete the target of a rule if commands exit with a nonzero exit status
75 75
.DELETE_ON_ERROR:
76

  
77
# magic to descend into other directories
78

  
79
obj := .
80
old-nested-dirs :=
81

  
82
define push-var
83
$(eval save-$2-$1 = $(value $1))
84
$(eval $1 :=)
85
endef
86

  
87
define pop-var
88
$(eval subdir-$2-$1 := $(if $(filter $2,$(save-$2-$1)),$(addprefix $2,$($1))))
89
$(eval $1 = $(value save-$2-$1) $$(subdir-$2-$1))
90
$(eval save-$2-$1 :=)
91
endef
92

  
93
define unnest-dir
94
$(foreach var,$(nested-vars),$(call push-var,$(var),$1/))
95
$(eval obj := $(obj)/$1)
96
$(eval include $(SRC_PATH)/$1/Makefile.objs)
97
$(eval obj := $(patsubst %/$1,%,$(obj)))
98
$(foreach var,$(nested-vars),$(call pop-var,$(var),$1/))
99
endef
100

  
101
define unnest-vars-1
102
$(eval nested-dirs := $(filter-out \
103
    $(old-nested-dirs), \
104
    $(sort $(foreach var,$(nested-vars), $(filter %/, $($(var)))))))
105
$(if $(nested-dirs),
106
  $(foreach dir,$(nested-dirs),$(call unnest-dir,$(patsubst %/,%,$(dir))))
107
  $(eval old-nested-dirs := $(old-nested-dirs) $(nested-dirs))
108
  $(call unnest-vars-1))
109
endef
110

  
111
define unnest-vars
112
$(call unnest-vars-1)
113
$(foreach var,$(nested-vars),$(eval $(var) := $(filter-out %/, $($(var)))))
114
endef

Also available in: Unified diff