On Tue, Feb 27, 2024 at 05:29:47PM +0100, Stefano Brivio wrote: > Don't run cppcheck to find out if the --check-level=exhaustive option > is available, unless we're actually going to run cppcheck later. > > To avoid this, move this check under the cppcheck target, and > implement it in shell script instead of using Makefile directives, > because we can't easily implement conditionals in recipes. > > Reported-by: Rahil Bhimjiani > Link: https://bugs.gentoo.org/920795 > Fixes: 8640d62af719 ("cppcheck: Use "exhaustive" level checking when available") > Signed-off-by: Stefano Brivio > --- > Makefile | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/Makefile b/Makefile > index af4fa87..75d0bf3 100644 > --- a/Makefile > +++ b/Makefile > @@ -287,17 +287,17 @@ clang-tidy: $(SRCS) $(HEADERS) > -config='{CheckOptions: [{key: bugprone-suspicious-string-compare.WarnOnImplicitComparison, value: "false"}]}' \ > --warnings-as-errors=* $(SRCS) -- $(filter-out -pie,$(FLAGS) $(CFLAGS) $(CPPFLAGS)) -DCLANG_TIDY_58992 > > -CPPCHECK_EXHAUSTIVE := > -ifeq ($(shell cppcheck --check-level=exhaustive /dev/null > /dev/null 2>&1; echo $$?),0) > - CPPCHECK_EXHAUSTIVE += --check-level=exhaustive > -endif > - > SYSTEM_INCLUDES := /usr/include $(wildcard /usr/include/$(TARGET)) > ifeq ($(shell $(CC) -v 2>&1 | grep -c "gcc version"),1) > VER := $(shell $(CC) -dumpversion) > SYSTEM_INCLUDES += /usr/lib/gcc/$(TARGET)/$(VER)/include > endif > cppcheck: $(SRCS) $(HEADERS) > + if cppcheck --check-level=exhaustive /dev/null > /dev/null 2>&1; then \ > + CPPCHECK_EXHAUSTIVE="--check-level=exhaustive"; \ > + else \ > + CPPCHECK_EXHAUSTIVE=; \ > + fi; \ > cppcheck --std=c11 --error-exitcode=1 --enable=all --force \ > --inconclusive --library=posix --quiet \ > $(CPPCHECK_EXHAUSTIVE) \ IIUC, this is essentially moving CPPCHECK_EXHAUSTIVE from a make variable to a shell variable in the shell that make invokes. Which is fine, but I believe $(CPPCHECK_EXHAUSTIVE) will only expand to a make variable. To get the shell variable you'll need $${CPPCHECK_EXHAUSTIVE}. I suspect as written, this will always expand empty. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson