summaryrefslogtreecommitdiffstats
path: root/src/build/tools/pre-commit
diff options
context:
space:
mode:
authorMegan <megan.teo@ibm.com>2019-06-25 15:17:40 -0500
committerDaniel M Crowell <dcrowell@us.ibm.com>2019-09-11 10:53:06 -0500
commit1d4530dac35a6baddf60a3bfd454aac1949f69b6 (patch)
tree5322e1e18208364078d0e0a5f54ecdf48402fe50 /src/build/tools/pre-commit
parentbafe5de9d8b538d978d9955386b5f1fd0ae1d82b (diff)
downloadtalos-hostboot-1d4530dac35a6baddf60a3bfd454aac1949f69b6.tar.gz
talos-hostboot-1d4530dac35a6baddf60a3bfd454aac1949f69b6.zip
Implement Static Analysis with cppcheck
Cppcheck static analysis tool can now be run when compiling by running: make cppcheck And it will always run when committing without stopping the commit if an error is found. This commit suppresses some false positives found in the code. A false positive can be suppressed inline by placing “// cppcheck-suppress syntaxError” in a line before the false positive., e.g.: char arr[5]; // cppcheck-suppress arrayIndexOutOfBounds arr[10] = 0; Change-Id: I9e833a153d6b04df2f8a72cd994e43922c61c2fe RTC: 201451 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/79629 Reviewed-by: Zachary Clark <zach@ibm.com> Reviewed-by: Nicholas E Bofferding <bofferdn@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/build/tools/pre-commit')
-rwxr-xr-xsrc/build/tools/pre-commit47
1 files changed, 46 insertions, 1 deletions
diff --git a/src/build/tools/pre-commit b/src/build/tools/pre-commit
index 3dc621bb3..e679728c0 100755
--- a/src/build/tools/pre-commit
+++ b/src/build/tools/pre-commit
@@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2011,2017
+# Contributors Listed Below - COPYRIGHT 2011,2019
# [+] International Business Machines Corp.
#
#
@@ -35,3 +35,48 @@ else
echo "For more info run './hb --help'"
exit -1
fi
+
+# Run cppcheck if variable is set, if not exit here
+if [[ $DOCPPCHECK -ne 1 ]]; then
+ exit 0
+fi
+
+echo "Running CPPCHECK"
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+ against=HEAD
+else
+ # This is the hash of the default empty tree in Git.
+ # If for some reason HEAD is not set, then diff'ing against this is like
+ # diff'ing against the very first commit.
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+${TOOLSDIR}/build-cppcheck
+CPPCHECKTOOL=${TOOLSDIR}/cpptools/cppcheck/cppcheck
+CPPCHECKFLAGS="--inline-suppr --error-exitcode=1"
+CPPCHECK=" ${CPPCHECKTOOL} ${CPPCHECKFLAGS}"
+
+for file in $(git diff-index --cached $against | \
+ grep -E '[MA].*\.(C|c|cpp|cc|cxx)$' | cut -f 2)
+do
+
+ dir="$(dirname $file)"
+ filename="$(basename $file)"
+
+ # TODO RTC 215692
+ # The following command checks for cppcheck errors. All cppcheck errors are
+ # printed to the terminal and stored to a file .${filename}.cppcheck.
+ set -o pipefail && cd ${dir} && timeout 2m ${CPPCHECK} $filename 2>&1 | tee .${filename}.cppcheck; exit_code=$?; \
+ if [ "$exit_code" -ne 1 ]; then \
+ # If exit code does not equal 1 (which is the error code when a cppcheck
+ # error is found) delete the created .cppcheck file.
+ # Note that time-out fails with error code 127.
+ rm -f .${filename}.cppcheck; \
+ fi
+ cd $PROJECT_ROOT
+
+done
+
+exit 0
OpenPOWER on IntegriCloud