summaryrefslogtreecommitdiffstats
path: root/src/build/tools/build-cppcheck
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/build-cppcheck
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/build-cppcheck')
-rwxr-xr-xsrc/build/tools/build-cppcheck95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/build/tools/build-cppcheck b/src/build/tools/build-cppcheck
new file mode 100755
index 000000000..8e19ed429
--- /dev/null
+++ b/src/build/tools/build-cppcheck
@@ -0,0 +1,95 @@
+#!/bin/bash -e
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/build/tools/build-cppcheck $
+#
+# OpenPOWER HostBoot Project
+#
+# Contributors Listed Below - COPYRIGHT 2019
+# [+] International Business Machines Corp.
+#
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# permissions and limitations under the License.
+#
+# IBM_PROLOG_END_TAG
+
+source $PROJECT_ROOT/src/build/citest/etc/cppcheck
+
+update_toolconfig(){
+ echo "commit: $CPPCHECK_COMMIT"
+ echo "gcc version: $(gcc -dumpversion)"
+ echo "S: $(uname -o)"
+ echo "arch: $(uname -m)"
+ echo "$(lsb_release -i)"
+ echo "$(lsb_release -r)"
+}
+
+if [ -n "${OPENPOWER_BUILD}" ]; then
+ exit
+fi
+
+cd $PROJECT_ROOT/src/build/tools
+
+if [[ ! -d "cpptools" ]]; then
+ mkdir cpptools
+fi
+
+cd cpptools
+if [[ ! -d "cppcheck" ]]; then
+ # cppcheck folder does not exist, clone repo for the first time
+ git clone git@github.com:danmar/cppcheck.git
+ cd cppcheck
+ git reset --hard $CPPCHECK_COMMIT #update to cppcheck commit
+ update_toolconfig >.cpp_toollevel
+ SHOULDMAKE=1
+else
+ cd cppcheck
+ if ! cmp -s .cpp_toollevel <(update_toolconfig) ; then
+ # cppcheck repo is not at the
+ # level set in $PROJECT_ROOT/src/build/citest/etc/cppcheck
+ if ! git fetch origin; then
+ cd $PROJECT_ROOT/src/build/tools/cpptools
+ rm -rf cppcheck
+ git clone git@github.com:danmar/cppcheck.git
+ cd cppcheck
+ fi
+ git reset --hard $CPPCHECK_COMMIT
+ update_toolconfig >.cpp_toollevel
+
+ SHOULDMAKE=1
+ fi
+ if [[ ! -f "cppcheck" ]]; then
+ SHOULDMAKE=1
+ fi
+fi
+
+if [ "${SHOULDMAKE}" ]; then
+
+ # Check if CXX is set, if it is not then try to find it with CXXPATH
+ # if CXXPATH does not exist, default to host's g++
+ if [ -z "$CXX" ]; then
+ if [ -z "${CXXPATH}" ]; then
+ export CXX=g++
+ else
+ export CXX=${CXXPATH}/g++
+ fi
+ fi
+
+ make
+
+fi
+
+cd $PROJECT_ROOT
+
+
OpenPOWER on IntegriCloud