dl-fldigi/scripts/tests/cppcheck/gen_cppcheck_results.sh

104 wiersze
3.4 KiB
Bash
Executable File

#! /bin/bash
#
# KL4YFD 2013
# Released under GNU GPL
#
# This script runs automatic source-code checks using the tool: "cppcheck"
# Checks are done to ensure needed binary exists first
cd $( dirname ${BASH_SOURCE[0]} )
INCLUDEDIR="../../../src/include"
SRCDIR="../../../src"
RESULTSDIR="results"
THREADS=8
function usage
{
printf "\n\nThis script executes the tool \"cppcheck\" and "
printf "\nsorts the results into separate files by severity / type\n Note: This analysis takes about the same time as compilation."
printf "\n\nUsage:"
printf "\n\tRun cppcheck tests:\t ./gen_cppcheck_results.sh run"
printf "\n\tClean up all files:\t ./gen_cppcheck_results.sh clean"
printf "\n\tPrint this usage:\t ./gen_cppcheck_results.sh help \n\n"
}
function cppcheck_clean {
rm -Rf $RESULTSDIR
printf "\ncppcheck results deleted!\n"
}
case "$1" in
"run")
cppcheck_clean
# Continue with rest of script...
break
;;
"clean")
cppcheck_clean
exit
;;
"--help" | "help")
usage
exit
;;
*)
usage
exit
;;
esac
# Ensure the binary "cppcheck" is on the system
if ! which cppcheck ; then
printf "\n\nERROR: Running the Fldigi cppcheck tests requires the program: cppcheck"
printf "\n\t Please install this program to continue."
printf "\n\n === ABORTING === \n\n"
exit 1
fi
mkdir $RESULTSDIR
cppcheck --inline-suppr --inconclusive --enable=all -I $INCLUDEDIR -j $THREADS --force --verbose $SRCDIR 2> $RESULTSDIR/ALL.txt
cd $RESULTSDIR
# Separate out the results into files based on their "cppcheck types"
cat ALL.txt | grep "(error)" > error.txt
cat ALL.txt | grep "(warning)" > warning.txt
cat ALL.txt | grep "(style)" > style.txt
cat ALL.txt | grep "(performance)" > performance.txt
cat ALL.txt | grep "(portability)" > portability.txt
cat ALL.txt | grep "(information)" > information.txt
cat ALL.txt | grep "(debug)" > debug.txt
# Separate out the tests with inconclusive results
cat ALL.txt | grep "(error, inconclusive)" > error_inconclusive.txt
cat ALL.txt | grep "(warning, inconclusive)" > warning_inconclusive.txt
cat ALL.txt | grep "(style, inconclusive)" > style_inconclusive.txt
cat ALL.txt | grep "(performance, inconclusive)" > performance_inconclusive.txt
cat ALL.txt | grep "(portability, inconclusive)" > portability_inconclusive.txt
cat ALL.txt | grep "(information, inconclusive)" > information_inconclusive.txt
#cat ALL.txt | grep "(debug, inconclusive)" > debug.txt # debug is for Messages from cppcheck itself, not a test-result. Therefore no such combination.
# Just in case... Catch everything _not_ in the above blocks.
cat ALL.txt | grep --invert-match "(error)" \
| grep --invert-match "(warning)" \
| grep --invert-match "(style)" \
| grep --invert-match "(performance)" \
| grep --invert-match "(portability)" \
| grep --invert-match "(information)" \
| grep --invert-match "(debug)" \
| grep --invert-match "(error, inconclusive)" \
| grep --invert-match "(warning, inconclusive)" \
| grep --invert-match "(style, inconclusive)" \
| grep --invert-match "(performance, inconclusive)" \
| grep --invert-match "(portability, inconclusive)" \
| grep --invert-match "(information, inconclusive)" > leftover.txt
cd ..
printf "\n\n === cppcheck source-code analysis complete. ==="
printf "\n\nResults saved in: $(pwd)/results \n\n"