diff options
author | Megan <megan.teo@ibm.com> | 2019-06-25 15:17:40 -0500 |
---|---|---|
committer | Daniel M Crowell <dcrowell@us.ibm.com> | 2019-09-11 10:53:06 -0500 |
commit | 1d4530dac35a6baddf60a3bfd454aac1949f69b6 (patch) | |
tree | 5322e1e18208364078d0e0a5f54ecdf48402fe50 /src/build/tools/pre-commit | |
parent | bafe5de9d8b538d978d9955386b5f1fd0ae1d82b (diff) | |
download | talos-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-x | src/build/tools/pre-commit | 47 |
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 |