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