From f23d57d4ada2dbab52e26073d462ebee57cf53a9 Mon Sep 17 00:00:00 2001 From: NRK Date: Wed, 15 Jun 2022 11:55:16 +0600 Subject: [PATCH] [ci]: use cppcheck and clang-tidy for static analysis --- .woodpecker/analysis.yml | 27 +++++++++++++++++++++++++++ .woodpecker/clang-tidy-checks | 16 ++++++++++++++++ Makefile | 3 +++ 3 files changed, 46 insertions(+) create mode 100644 .woodpecker/analysis.yml create mode 100644 .woodpecker/clang-tidy-checks diff --git a/.woodpecker/analysis.yml b/.woodpecker/analysis.yml new file mode 100644 index 0000000..926dbbf --- /dev/null +++ b/.woodpecker/analysis.yml @@ -0,0 +1,27 @@ +pipeline: + analysis: + image: alpine + when: + branch: master + commands: | + apk add --no-cache build-base cppcheck clang-extra-tools \ + imlib2-dev xorgproto \ + libxft-dev libexif-dev giflib-dev libwebp-dev >/dev/null + make config.h version.h + std="c99" + run_cppcheck() { + cppcheck --std="$std" --enable=performance,portability \ + --force --quiet --inline-suppr --error-exitcode=1 \ + --max-ctu-depth=8 -j"$(nproc)" \ + $(make OPT_DEP_DEFAULT="$1" dump_cppflags) \ + *.c + } + run_tidy() { + checks="$(sed '/^#/d' .woodpecker/clang-tidy-checks | paste -d ',' -s)" + clang-tidy --warnings-as-errors="*" --checks="$checks" --quiet *.c \ + -- -std="$std" $(make OPT_DEP_DEFAULT="$1" dump_cppflags) + } + run_cppcheck "0" + run_cppcheck "1" + run_tidy "0" + run_tidy "1" diff --git a/.woodpecker/clang-tidy-checks b/.woodpecker/clang-tidy-checks new file mode 100644 index 0000000..67394d4 --- /dev/null +++ b/.woodpecker/clang-tidy-checks @@ -0,0 +1,16 @@ +# checks +clang-analyzer-*,clang-diagnostic-*,bugprone-*,performance-*,modernize-* +misc-*,readability-*,android-cloexec-*,cert-* + +# silence +-misc-unused-parameters +-bugprone-easily-swappable-parameters,-bugprone-narrowing-conversions,-bugprone-incorrect-roundings +-bugprone-implicit-widening-of-multiplication-result,-bugprone-integer-division +-readability-braces-around-statements,-readability-magic-numbers,-readability-isolate-declaration +-readability-function-cognitive-complexity,-readability-else-after-return +-readability-uppercase-literal-suffix,-readability-avoid-const-params-in-decls +-android-cloexec-fopen,-android-cloexec-pipe + +# false positive warnings +-clang-analyzer-valist.Uninitialized +-misc-no-recursion diff --git a/Makefile b/Makefile index 0ada98d..cc8f3ce 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,9 @@ version.h: config.mk .git/index .git/index: +dump_cppflags: + @echo $(nsxiv_cppflags) + clean: rm -f *.o nsxiv version.h