Makefile: fix issue with printvars executing giant shell command
The underlying problem is that $(foreach V,1 2 3,) does not evaluate to an empty string. It evaluates to " ", three empty strings separated by whitespace. A construct of this format, with a giant list in the foreach, is part of the printvars command. This means that "@:$(foreach ....)", which is intended to expand to a null command, in fact expands to "@: " with a great deal of whitespace. Make chooses to execute this command with: execve("/bin/sh", ["/bin/sh", "-c", ": "] But with far more whitespace. So much that it can exceed shell command line length limits. This solution is to move the foreach to another step in the recipe. The "@:" is retained as the first line so the recipe is not Empty, which would cause a change in make behavior when make builds the target. The 2nd line, all whitespace, will be skipped by make. Signed-off-by: Trent Piepho <tpiepho@impinj.com> Tested-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
parent
ca5ae83ccb
commit
b8d0aadc6d
3
Makefile
3
Makefile
@ -988,7 +988,8 @@ $(BUILD_DIR)/.br2-external.in: $(BUILD_DIR)
|
|||||||
# displayed.
|
# displayed.
|
||||||
.PHONY: printvars
|
.PHONY: printvars
|
||||||
printvars:
|
printvars:
|
||||||
@:$(foreach V, \
|
@:
|
||||||
|
$(foreach V, \
|
||||||
$(sort $(if $(VARS),$(filter $(VARS),$(.VARIABLES)),$(.VARIABLES))), \
|
$(sort $(if $(VARS),$(filter $(VARS),$(.VARIABLES)),$(.VARIABLES))), \
|
||||||
$(if $(filter-out environment% default automatic, \
|
$(if $(filter-out environment% default automatic, \
|
||||||
$(origin $V)), \
|
$(origin $V)), \
|
||||||
|
Loading…
Reference in New Issue
Block a user