From 34cc0c30f97f886ad5228568066c560367423dce Mon Sep 17 00:00:00 2001 From: Matt Mitchell Date: Wed, 22 Apr 2015 09:23:46 -0700 Subject: Initial commit of script to run cppcheck. This script runs the cppcheck and sloccount tools for static analysis. The lab runs this script with the default arguments Mark script as executable --- run-cppcheck.sh | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100755 run-cppcheck.sh (limited to 'run-cppcheck.sh') diff --git a/run-cppcheck.sh b/run-cppcheck.sh new file mode 100755 index 0000000000..6888468bfa --- /dev/null +++ b/run-cppcheck.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash + +# This script automatically runs the basic cppcheck and sloccount tools to generate a static analysis report. + +usage() +{ + echo "Usage: run-cppcheck.sh [options] [files]" + echo "Option: Description" + echo " --no-sloccount Don't run sloccount" + echo " --no-cppcheck Don't run cppcheck" + echo " --cppcheck-out Output file for cppcheck step. Default cppcheck.xml" + echo " --sloccount-out Output file for sloccount step. Default sloccount.sc" + echo "Files:" + echo " files Files to run cppcheck through. Default src/**" +} + +check_dependencies() +{ + # Check presence of cppcheck on the path + if [ "$RunCppCheck" == true ] + then + hash cppcheck 2>/dev/null || { echo >&2 "Please install cppcheck before running this script"; exit 1; } + fi + + # Check presence of sloccount on the path + if [ "$RunSlocCount" == true ] + then + hash sloccount 2>/dev/null || { echo >&2 "Please install sloccount before running this script"; exit 1; } + fi +} + +ProjectRoot="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +RunSlocCount=true +RunCppCheck=true +Files="$ProjectRoot/src/**" +FilesFromArgs="" +CppCheckOutput="cppcheck.xml" +SloccountOutput="sloccount.sc" +# Get the number of processors available to the scheduler +# Other techniques such as `nproc` only get the number of +# processors available to a single process. +if [ `uname` = "FreeBSD" ]; then +NumProc=`sysctl hw.ncpu | awk '{ print $2+1 }'` +else +NumProc=$(($(getconf _NPROCESSORS_ONLN)+1)) +fi + +while [[ $# > 0 ]] +do + opt="$1" + shift + case $opt in + -?|-h|--help) + usage + exit 1 + ;; + --no-sloccount) + RunSlocCount=false + ;; + --no-cppcheck) + RunCppCheck=false + ;; + --cppcheck-out) + CppCheckOutput=$1 + shift + ;; + --sloccount-out) + SloccountOutput=$1 + shift + ;; + --*) + echo "Unrecognized option: $opt" + usage + exit 1 + ;; + *) + FilesFromArgs="$FilesFromArgs $opt" + esac +done + +if [ "$FilesFromArgs" != "" ]; +then + Files=$FilesFromArgs +fi + +if [ "$CppCheckOutput" == "" ]; +then + echo "Expected: file for cppcheck output" + usage + exit 1 +fi + +if [ "$SloccountOutput" == "" ]; +then + echo "Expected: file for sloccount output" + usage + exit 1 +fi + +check_dependencies + +if [ "$RunCppCheck" == true ] +then + echo "Running cppcheck for files: $Files" + cppcheck --enable=all -j $NumProc --xml --xml-version=2 --force $Files 2> $CppCheckOutput + CppCheckOutputs="$CppCheckOutput (cppcheck)" +fi + +if [ "$RunSlocCount" == true ] +then + echo "Running sloccount for files: $Files" + sloccount --wide --details $Files > $SloccountOutput + SlocCountOutputs="$SloccountOutput (sloccount)" +fi + +echo Check finished. Results can be found in: $CppCheckOutputs $SlocCountOutputs +exit 0 \ No newline at end of file -- cgit v1.2.3