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
|
|
|
|
|
2024-12-06 17:17:01 +01:00
|
|
|
SRC_DIR=${1:-${SCRIPT_DIR}/../src}
|
|
|
|
|
2020-06-01 21:42:02 +02:00
|
|
|
LOG_FILE=/tmp/cppcheck_qgis.txt
|
|
|
|
|
|
|
|
rm -f ${LOG_FILE}
|
2025-01-27 17:07:38 +01:00
|
|
|
echo "Checking ${SRC_DIR} ..."
|
2020-06-01 21:42:02 +02:00
|
|
|
|
2023-04-05 10:56:10 +10:00
|
|
|
# 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= \
|
2020-06-14 15:57:20 +02:00
|
|
|
-DSIP_FACTORY= \
|
2023-04-14 11:26:39 +10:00
|
|
|
-DSIP_PYNAME= \
|
2020-11-09 12:27:05 +01:00
|
|
|
-DSIP_THROW= \
|
2023-04-17 11:03:29 +10:00
|
|
|
-DFINAL="final" \
|
2020-06-13 20:07:28 +02:00
|
|
|
-DCMAKE_SOURCE_DIR="/foo/bar" \
|
2020-11-09 12:27:05 +01:00
|
|
|
-DQ_NOWARN_DEPRECATED_PUSH= \
|
|
|
|
-DQ_NOWARN_DEPRECATED_POP= \
|
2024-10-15 10:46:08 +10:00
|
|
|
-DQ_NOWARN_UNREACHABLE_PUSH= \
|
|
|
|
-DQ_NOWARN_UNREACHABLE_POP= \
|
2020-11-09 12:27:05 +01:00
|
|
|
-DQ_DECLARE_OPAQUE_POINTER= \
|
2023-04-05 11:46:41 +10:00
|
|
|
-DQGIS_PROTECT_QOBJECT_THREAD_ACCESS = \
|
|
|
|
-DQ_DECLARE_SQLDRIVER_PRIVATE = \
|
|
|
|
-DSIP_MONKEYPATCH_SCOPEENUM_UNNEST = \
|
2024-01-31 08:00:15 +10:00
|
|
|
-DSIP_ENUM_BASETYPE = \
|
2024-12-06 06:24:08 +10:00
|
|
|
-DSIP_TYPEHEADER_INCLUDE = \
|
2023-08-08 08:23:58 +10:00
|
|
|
-DQT3D_FUNCTOR = \
|
2023-04-14 12:04:00 +10:00
|
|
|
-DQgsSetCPLHTTPFetchOverriderInitiatorClass = \
|
2024-10-22 08:00:05 +10:00
|
|
|
-DQgsSetRequestInitiatorClass = \
|
2023-04-14 11:26:39 +10:00
|
|
|
-DBUILTIN_UNREACHABLE="__builtin_unreachable();" \
|
2023-04-05 10:56:10 +10:00
|
|
|
-i src/analysis/georeferencing/qgsgcptransformer.cpp \
|
2020-06-01 21:42:02 +02:00
|
|
|
-j $(nproc) \
|
2024-12-06 17:17:01 +01:00
|
|
|
${SRC_DIR} \
|
2020-06-01 21:42:02 +02:00
|
|
|
>>${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
|
|
|
|
|
2020-06-13 20:07:28 +02:00
|
|
|
cat ${LOG_FILE} | grep -v -e "syntaxError," -e "cppcheckError," > ${LOG_FILE}.tmp
|
|
|
|
mv ${LOG_FILE}.tmp ${LOG_FILE}
|
|
|
|
|
2023-04-17 11:03:29 +10:00
|
|
|
ERROR_CATEGORIES=("clarifyCalculation" "duplicateExpressionTernary" "redundantCondition" "postfixOperator" "functionConst" "unsignedLessThanZero" "duplicateBranch" "missingOverride")
|
2022-07-21 16:08:52 +02:00
|
|
|
|
|
|
|
# unusedPrivateFunction not reliable enough in cppcheck 1.72 of Ubuntu 16.04
|
|
|
|
if test "$(cppcheck --version)" != "Cppcheck 1.72"; then
|
|
|
|
ERROR_CATEGORIES+=("unusedPrivateFunction")
|
|
|
|
fi
|
|
|
|
|
2020-06-13 20:07:28 +02:00
|
|
|
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
|
2020-06-14 15:57:20 +02:00
|
|
|
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
|
2020-06-02 00:39:17 +02:00
|
|
|
fi
|
|
|
|
done
|
2020-06-01 21:42:02 +02:00
|
|
|
|
|
|
|
if [ ${ret_code} = 0 ]; then
|
|
|
|
echo "cppcheck succeeded"
|
|
|
|
fi
|
|
|
|
|
|
|
|
exit ${ret_code}
|