diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2016-11-23 19:09:09 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2016-11-23 19:09:09 +0900 |
commit | 4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (patch) | |
tree | 98110734c91668dfdbb126fcc0e15ddbd93738ca /run-cppcheck.sh | |
parent | fa45f57ed55137c75ac870356a1b8f76c84b229c (diff) | |
download | coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.gz coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.bz2 coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.zip |
Imported Upstream version 1.1.0upstream/1.1.0
Diffstat (limited to 'run-cppcheck.sh')
-rwxr-xr-x | run-cppcheck.sh | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/run-cppcheck.sh b/run-cppcheck.sh new file mode 100755 index 0000000000..c505fd184d --- /dev/null +++ b/run-cppcheck.sh @@ -0,0 +1,119 @@ +#!/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 <file> Output file for cppcheck step. Default cppcheck.xml" + echo " --sloccount-out <file> 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 }'` +elif [ `uname` = "NetBSD" ]; then +NumProc=$(($(getconf NPROCESSORS_ONLN)+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 |