| From 31eacaded96447b77872615d386626f40116625f Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 30 Jul 2020 19:42:44 -0700 |
| Subject: tools, build: Propagate build failures from |
| tools/build/Makefile.build |
| |
| From: Andrii Nakryiko <andriin@fb.com> |
| |
| [ Upstream commit a278f3d8191228212c553a5d4303fa603214b717 ] |
| |
| The '&&' command seems to have a bad effect when $(cmd_$(1)) exits with |
| non-zero effect: the command failure is masked (despite `set -e`) and all but |
| the first command of $(dep-cmd) is executed (successfully, as they are mostly |
| printfs), thus overall returning 0 in the end. |
| |
| This means in practice that despite compilation errors, tools's build Makefile |
| will return success. We see this very reliably with libbpf's Makefile, which |
| doesn't get compilation error propagated properly. This in turns causes issues |
| with selftests build, as well as bpftool and other projects that rely on |
| building libbpf. |
| |
| The fix is simple: don't use &&. Given `set -e`, we don't need to chain |
| commands with &&. The shell will exit on first failure, giving desired |
| behavior and propagating error properly. |
| |
| Fixes: 275e2d95591e ("tools build: Move dependency copy into function") |
| Signed-off-by: Andrii Nakryiko <andriin@fb.com> |
| Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> |
| Acked-by: Jiri Olsa <jolsa@redhat.com> |
| Link: https://lore.kernel.org/bpf/20200731024244.872574-1-andriin@fb.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| tools/build/Build.include | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| diff --git a/tools/build/Build.include b/tools/build/Build.include |
| index 9ec01f4454f9f..585486e40995b 100644 |
| --- a/tools/build/Build.include |
| +++ b/tools/build/Build.include |
| @@ -74,7 +74,8 @@ dep-cmd = $(if $(wildcard $(fixdep)), |
| # dependencies in the cmd file |
| if_changed_dep = $(if $(strip $(any-prereq) $(arg-check)), \ |
| @set -e; \ |
| - $(echo-cmd) $(cmd_$(1)) && $(dep-cmd)) |
| + $(echo-cmd) $(cmd_$(1)); \ |
| + $(dep-cmd)) |
| |
| # if_changed - execute command if any prerequisite is newer than |
| # target, or command line has changed |
| -- |
| 2.25.1 |
| |