diff options
author | Sam Ravnborg <sam@mars.ravnborg.org> | 2006-08-08 15:35:14 -0400 |
---|---|---|
committer | Sam Ravnborg <sam@neptun.ravnborg.org> | 2006-09-25 03:01:49 -0400 |
commit | 45d506bd65e2e35881d8276c111b647807823d19 (patch) | |
tree | 8f53e4e58165fc2c7f62e17b31dfb77ef43d7dfc /scripts | |
parent | 12715d20af9fd9179daca7a1cd2cf3db3c2c494f (diff) |
kbuild: make V=2 tell why a target is rebuild
tell why a a target got build
enabled by make V=2
Output (listed in the order they are checked):
(1) - due to target is PHONY
(2) - due to target missing
(3) - due to: file1.h file2.h
(4) - due to command line change
(5) - due to missing .cmd file
(6) - due to target not in $(targets)
(1) We always build PHONY targets
(2) No target, so we better build it
(3) Prerequisite is newer than target
(4) The command line stored in the file named dir/.target.cmd
differed from actual command line. This happens when compiler
options changes
(5) No dir/.target.cmd file (used to store command line)
(6) No dir/.target.cmd file and target not listed in $(targets)
This is a good hint that there is a bug in the kbuild file
This patch is inspired by a patch from: Milton Miller <miltonm@bga.com>
Cc: Milton Miller <miltonm@bga.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/Kbuild.include | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index 1d6ffb26e20f..3d523899fdc0 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include | |||
@@ -129,7 +129,7 @@ endif | |||
129 | 129 | ||
130 | # echo command. Short version is $(quiet) equals quiet, otherwise full command | 130 | # echo command. Short version is $(quiet) equals quiet, otherwise full command |
131 | echo-cmd = $(if $($(quiet)cmd_$(1)), \ | 131 | echo-cmd = $(if $($(quiet)cmd_$(1)), \ |
132 | echo ' $(call escsq,$($(quiet)cmd_$(1)))';) | 132 | echo ' $(call escsq,$($(quiet)cmd_$(1)))$(echo-why)';) |
133 | 133 | ||
134 | # >'< substitution is for echo to work, | 134 | # >'< substitution is for echo to work, |
135 | # >$< substitution to preserve $ when reloading .cmd file | 135 | # >$< substitution to preserve $ when reloading .cmd file |
@@ -164,3 +164,42 @@ if_changed_rule = $(if $(strip $(any-prereq) $(arg-check) ), \ | |||
164 | @set -e; \ | 164 | @set -e; \ |
165 | $(rule_$(1))) | 165 | $(rule_$(1))) |
166 | 166 | ||
167 | ### | ||
168 | # why - tell why a a target got build | ||
169 | # enabled by make V=2 | ||
170 | # Output (listed in the order they are checked): | ||
171 | # (1) - due to target is PHONY | ||
172 | # (2) - due to target missing | ||
173 | # (3) - due to: file1.h file2.h | ||
174 | # (4) - due to command line change | ||
175 | # (5) - due to missing .cmd file | ||
176 | # (6) - due to target not in $(targets) | ||
177 | # (1) PHONY targets are always build | ||
178 | # (2) No target, so we better build it | ||
179 | # (3) Prerequisite is newer than target | ||
180 | # (4) The command line stored in the file named dir/.target.cmd | ||
181 | # differed from actual command line. This happens when compiler | ||
182 | # options changes | ||
183 | # (5) No dir/.target.cmd file (used to store command line) | ||
184 | # (6) No dir/.target.cmd file and target not listed in $(targets) | ||
185 | # This is a good hint that there is a bug in the kbuild file | ||
186 | ifeq ($(KBUILD_VERBOSE),2) | ||
187 | why = \ | ||
188 | $(if $(filter $@, $(PHONY)),- due to target is PHONY, \ | ||
189 | $(if $(wildcard $@), \ | ||
190 | $(if $(strip $(any-prereq)),- due to: $(any-prereq), \ | ||
191 | $(if $(arg-check), \ | ||
192 | $(if $(cmd_$@),- due to command line change, \ | ||
193 | $(if $(filter $@, $(targets)), \ | ||
194 | - due to missing .cmd file, \ | ||
195 | - due to $(notdir $@) not in $$(targets) \ | ||
196 | ) \ | ||
197 | ) \ | ||
198 | ) \ | ||
199 | ), \ | ||
200 | - due to target missing \ | ||
201 | ) \ | ||
202 | ) | ||
203 | |||
204 | echo-why = $(call escsq, $(strip $(why))) | ||
205 | endif | ||