aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xscripts/pvscheck.sh96
1 files changed, 96 insertions, 0 deletions
diff --git a/scripts/pvscheck.sh b/scripts/pvscheck.sh
new file mode 100755
index 0000000000..0a3d7486f2
--- /dev/null
+++ b/scripts/pvscheck.sh
@@ -0,0 +1,96 @@
+#!/bin/sh
+set -x
+set -e
+
+get_jobs_num() {
+ local num="$(cat /proc/cpuinfo | grep -c "^processor")"
+ num="$(echo $(( num + 1 )))"
+ num="${num:-1}"
+ echo $num
+}
+
+get_pvs_comment() {
+ cat > pvs-comment << EOF
+// This is an open source non-commercial project. Dear PVS-Studio, please check it.
+// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
+EOF
+}
+
+install_pvs() {
+ mkdir pvs-studio
+ cd pvs-studio
+
+ curl -o pvs-studio.tar.gz "$PVS_URL"
+ tar xzf pvs-studio.tar.gz
+ rm pvs-studio.tar.gz
+ local pvsdir="$(find . -maxdepth 1 -mindepth 1)"
+ find "$pvsdir" -maxdepth 1 -mindepth 1 -exec mv '{}' . \;
+ rmdir "$pvsdir"
+
+ export PATH="$PWD/bin${PATH+:}${PATH}"
+
+ cd ..
+}
+
+create_compile_commands() {
+ mkdir build
+ cd build
+ env \
+ CC=clang \
+ CFLAGS=' -O0 ' \
+ cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="$PWD/root"
+ make -j"$(get_jobs_num)"
+ find src/nvim/auto -name '*.test-include.c' -delete
+
+ cd ..
+}
+
+patch_sources() {
+ get_pvs_comment
+
+ local sh_script='
+ cat pvs-comment "$1" > "$1.tmp"
+ mv "$1.tmp" "$1"
+ '
+
+ find \
+ src/nvim test/functional/fixtures test/unit/fixtures \
+ -name '*.[ch]' \
+ -exec /bin/sh -c "$sh_script" - '{}' \;
+
+ find \
+ build/src/nvim/auto build/config \
+ -name '*.[ch]' -not -name '*.test-include.c' \
+ -exec /bin/sh -c "$sh_script" - '{}' \;
+}
+
+main() {
+ local PVS_URL="http://files.viva64.com/pvs-studio-6.14.21446.1-x86_64.tgz"
+
+ local tgt="${1:-$PWD/../neovim-pvs}"
+ local branch="${2:-master}"
+
+ git worktree add "$tgt" "$branch"
+
+ cd "$tgt"
+
+ install_pvs
+
+ create_compile_commands
+
+ patch_sources
+
+ pvs-studio-analyzer \
+ analyze \
+ --threads "$(get_jobs_num)" \
+ --output-file PVS-studio.log \
+ --verbose \
+ --file build/compile_commands.json \
+ --sourcetree-root .
+
+ plog-converter -t xml -o PVS-studio.xml PVS-studio.log
+ plog-converter -t errorfile -o PVS-studio.err PVS-studio.log
+ plog-converter -t tasklist -o PVS-studio.tsk PVS-studio.log
+}
+
+main "$@"