QGIS/scripts/cppcheck.sh

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

105 lines
3.0 KiB
Bash
Raw Normal View History

2022-08-08 10:44:57 +02:00
#!/usr/bin/env bash
2020-06-01 21:42:02 +02:00
set -eu
SCRIPT_DIR=$(dirname "$0")
case $SCRIPT_DIR in
"/"*)
;;
".")
SCRIPT_DIR=$(pwd)
;;
*)
SCRIPT_DIR=$(pwd)/$(dirname "$0")
;;
esac
LOG_FILE=/tmp/cppcheck_qgis.txt
rm -f ${LOG_FILE}
echo "Checking ${SCRIPT_DIR}/../src ..."
# qgsgcptransformer.cpp causes an effective hang on newer cppcheck!
2020-06-01 21:42:02 +02:00
cppcheck --library=qt.cfg --inline-suppr \
--template='{file}:{line},{severity},{id},{message}' \
--enable=all --inconclusive --std=c++11 \
-DPROJ_VERSION_MAJOR=6 \
-USIP_RUN \
-DSIP_TRANSFER= \
-DSIP_TRANSFERTHIS= \
-DSIP_INOUT= \
-DSIP_OUT= \
-DSIP_FACTORY= \
-DSIP_PYNAME= \
-DSIP_THROW= \
-DFINAL="final" \
-DCMAKE_SOURCE_DIR="/foo/bar" \
-DQ_NOWARN_DEPRECATED_PUSH= \
-DQ_NOWARN_DEPRECATED_POP= \
2024-10-15 10:46:08 +10:00
-DQ_NOWARN_UNREACHABLE_PUSH= \
-DQ_NOWARN_UNREACHABLE_POP= \
-DQ_DECLARE_OPAQUE_POINTER= \
-DQGIS_PROTECT_QOBJECT_THREAD_ACCESS = \
-DQ_DECLARE_SQLDRIVER_PRIVATE = \
-DSIP_MONKEYPATCH_SCOPEENUM_UNNEST = \
-DSIP_ENUM_BASETYPE = \
2024-12-06 06:24:08 +10:00
-DSIP_TYPEHEADER_INCLUDE = \
2023-08-08 08:23:58 +10:00
-DQT3D_FUNCTOR = \
-DQgsSetCPLHTTPFetchOverriderInitiatorClass = \
-DQgsSetRequestInitiatorClass = \
-DBUILTIN_UNREACHABLE="__builtin_unreachable();" \
-i src/analysis/georeferencing/qgsgcptransformer.cpp \
2020-06-01 21:42:02 +02:00
-j $(nproc) \
${SCRIPT_DIR}/../src \
>>${LOG_FILE} 2>&1 &
PID=$!
while kill -0 $PID 2>/dev/null; do
printf "."
sleep 1
done
echo " done"
if ! wait $PID; then
echo "cppcheck failed"
exit 1
fi
ret_code=0
cat ${LOG_FILE} | grep -v -e "syntaxError," -e "cppcheckError," > ${LOG_FILE}.tmp
mv ${LOG_FILE}.tmp ${LOG_FILE}
ERROR_CATEGORIES=("clarifyCalculation" "duplicateExpressionTernary" "redundantCondition" "postfixOperator" "functionConst" "unsignedLessThanZero" "duplicateBranch" "missingOverride")
# unusedPrivateFunction not reliable enough in cppcheck 1.72 of Ubuntu 16.04
if test "$(cppcheck --version)" != "Cppcheck 1.72"; then
ERROR_CATEGORIES+=("unusedPrivateFunction")
fi
for category in "style" "performance" "portability"; do
2020-06-01 21:42:02 +02:00
if grep "${category}," ${LOG_FILE} >/dev/null; then
echo "INFO: Issues in '${category}' category found, but not considered as making script to fail:"
2022-08-08 10:44:57 +02:00
grep "${category}," ${LOG_FILE} | grep -v $(printf -- "-e %s, " "${ERROR_CATEGORIES[@]}")
2020-06-01 21:42:02 +02:00
echo ""
fi
done
2022-08-08 10:44:57 +02:00
for category in "error" "warning" "${ERROR_CATEGORIES[@]}"; do
if test "${category}" != ""; then
if grep "${category}," ${LOG_FILE} >/dev/null; then
echo "ERROR: Issues in '${category}' category found:"
grep "${category}," ${LOG_FILE}
echo ""
echo "${category} check failed !"
ret_code=1
fi
fi
done
2020-06-01 21:42:02 +02:00
if [ ${ret_code} = 0 ]; then
echo "cppcheck succeeded"
fi
exit ${ret_code}