summaryrefslogtreecommitdiff
path: root/run-cppcheck.sh
diff options
context:
space:
mode:
authorMatt Mitchell <mmitche@microsoft.com>2015-04-22 16:23:46 (GMT)
committerMatt Mitchell <mmitche@microsoft.com>2015-04-22 17:21:31 (GMT)
commit34cc0c30f97f886ad5228568066c560367423dce (patch)
treecba823fa656bafd22cc06d2780b50b31f68bfb7a /run-cppcheck.sh
parent55cbbaf98515d13ae6c08a28da1eb9196093e1dc (diff)
downloadcoreclr-34cc0c30f97f886ad5228568066c560367423dce.zip
coreclr-34cc0c30f97f886ad5228568066c560367423dce.tar.gz
coreclr-34cc0c30f97f886ad5228568066c560367423dce.tar.bz2
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
Diffstat (limited to 'run-cppcheck.sh')
-rwxr-xr-xrun-cppcheck.sh117
1 files changed, 117 insertions, 0 deletions
diff --git a/run-cppcheck.sh b/run-cppcheck.sh
new file mode 100755
index 0000000..6888468
--- /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 <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 }'`
+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