Skip to content

Commit

Permalink
Merge pull request #36873 from rouault/cppcheck_gh_action
Browse files Browse the repository at this point in the history
Fix remaining cppcheck warnings, add scripts/cppcheck.sh and corresponding GH workflow jobs
  • Loading branch information
rouault committed Jun 2, 2020
2 parents dd86a5a + 9df71ef commit b4f5b48
Show file tree
Hide file tree
Showing 97 changed files with 613 additions and 396 deletions.
26 changes: 26 additions & 0 deletions .github/workflows/code_layout.yml
Expand Up @@ -158,3 +158,29 @@ jobs:
run: ./tests/code_layout/test_sip_include.sh
- name: Sip Files Up To Date
run: ./tests/code_layout/test_sipfiles_uptodate.sh

cppcheck_16_04:
runs-on: ubuntu-16.04
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Install Requirements
run: |
sudo apt install -y cppcheck
- name: Run cppcheck test
run: ./scripts/cppcheck.sh

cppcheck_18_04:
runs-on: ubuntu-18.04
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Install Requirements
run: |
sudo apt install -y cppcheck
- name: Run cppcheck test
run: ./scripts/cppcheck.sh
2 changes: 1 addition & 1 deletion python/core/auto_generated/diagram/qgsdiagram.sip.in
Expand Up @@ -9,7 +9,7 @@



class QgsDiagram
class QgsDiagram /NoDefaultCtors/
{
%Docstring
Base class for all diagram types*
Expand Down
Expand Up @@ -11,7 +11,7 @@



class QgsHistogramDiagram: QgsDiagram
class QgsHistogramDiagram: QgsDiagram /NoDefaultCtors/
{

%TypeHeaderCode
Expand Down
2 changes: 1 addition & 1 deletion python/core/auto_generated/diagram/qgspiediagram.sip.in
Expand Up @@ -9,7 +9,7 @@



class QgsPieDiagram: QgsDiagram
class QgsPieDiagram: QgsDiagram /NoDefaultCtors/
{

%TypeHeaderCode
Expand Down
Expand Up @@ -11,7 +11,7 @@



class QgsStackedBarDiagram: QgsDiagram
class QgsStackedBarDiagram: QgsDiagram /NoDefaultCtors/
{
%Docstring

Expand Down
2 changes: 1 addition & 1 deletion python/core/auto_generated/diagram/qgstextdiagram.sip.in
Expand Up @@ -9,7 +9,7 @@



class QgsTextDiagram: QgsDiagram
class QgsTextDiagram: QgsDiagram /NoDefaultCtors/
{

%TypeHeaderCode
Expand Down
2 changes: 1 addition & 1 deletion python/core/auto_generated/effects/qgsblureffect.sip.in
Expand Up @@ -9,7 +9,7 @@



class QgsBlurEffect : QgsPaintEffect
class QgsBlurEffect : QgsPaintEffect /NoDefaultCtors/
{
%Docstring
A paint effect which blurs a source picture, using a number of different blur
Expand Down
2 changes: 1 addition & 1 deletion python/core/auto_generated/effects/qgscoloreffect.sip.in
Expand Up @@ -9,7 +9,7 @@



class QgsColorEffect : QgsPaintEffect
class QgsColorEffect : QgsPaintEffect /NoDefaultCtors/
{
%Docstring
A paint effect which alters the colors (e.g., brightness, contrast) in a
Expand Down
2 changes: 1 addition & 1 deletion python/core/auto_generated/effects/qgseffectstack.sip.in
Expand Up @@ -9,7 +9,7 @@



class QgsEffectStack : QgsPaintEffect
class QgsEffectStack : QgsPaintEffect /NoDefaultCtors/
{
%Docstring
A paint effect which consists of a stack of other chained paint effects
Expand Down
4 changes: 2 additions & 2 deletions python/core/auto_generated/effects/qgspainteffect.sip.in
Expand Up @@ -10,7 +10,7 @@



class QgsPaintEffect
class QgsPaintEffect /NoDefaultCtors/
{
%Docstring
Base class for visual effects which can be applied to QPicture drawings
Expand Down Expand Up @@ -319,7 +319,7 @@ to rendering results onto a painter.
};


class QgsDrawSourceEffect : QgsPaintEffect
class QgsDrawSourceEffect : QgsPaintEffect /NoDefaultCtors/
{
%Docstring
A paint effect which draws the source picture with minor or no alterations
Expand Down
6 changes: 3 additions & 3 deletions python/core/auto_generated/effects/qgsshadoweffect.sip.in
Expand Up @@ -9,7 +9,7 @@



class QgsShadowEffect : QgsPaintEffect
class QgsShadowEffect : QgsPaintEffect /NoDefaultCtors/
{
%Docstring
Base class for paint effects which offset, blurred shadows
Expand Down Expand Up @@ -295,7 +295,7 @@ the picture.
};


class QgsDropShadowEffect : QgsShadowEffect
class QgsDropShadowEffect : QgsShadowEffect /NoDefaultCtors/
{
%Docstring
A paint effect which draws an offset and optionally blurred drop shadow
Expand Down Expand Up @@ -331,7 +331,7 @@ Creates a new QgsDropShadowEffect effect from a properties string map.

};

class QgsInnerShadowEffect : QgsShadowEffect
class QgsInnerShadowEffect : QgsShadowEffect /NoDefaultCtors/
{
%Docstring
A paint effect which draws an offset and optionally blurred drop shadow
Expand Down
Expand Up @@ -9,7 +9,7 @@



class QgsTransformEffect : QgsPaintEffect
class QgsTransformEffect : QgsPaintEffect /NoDefaultCtors/
{
%Docstring
A paint effect which applies transformations (such as move,
Expand Down
Expand Up @@ -313,6 +313,7 @@ Low-level removal of children from the node.
%End

protected:

};


Expand Down
1 change: 1 addition & 0 deletions python/server/auto_generated/qgsaccesscontrol.sip.in
Expand Up @@ -38,6 +38,7 @@ Constructor

~QgsAccessControl();


void resolveFilterFeatures( const QList<QgsMapLayer *> &layers );
%Docstring
Resolve features' filter of layers
Expand Down
70 changes: 70 additions & 0 deletions scripts/cppcheck.sh
@@ -0,0 +1,70 @@
#!/bin/sh

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 ..."

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= \
-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

for category in "error" "style" "performance" "portability"; do
if grep "${category}," ${LOG_FILE} >/dev/null; then
echo "INFO: Issues in '${category}' category found, but not considered as making script to fail:"
grep "${category}," ${LOG_FILE} | grep -v "clarifyCalculation,"
echo ""
fi
done

for category in "warning" "clarifyCalculation"; do
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
done

if [ ${ret_code} = 0 ]; then
echo "cppcheck succeeded"
fi

exit ${ret_code}
6 changes: 2 additions & 4 deletions src/3d/mesh/qgsmesh3dentity_p.cpp
Expand Up @@ -49,11 +49,10 @@ void QgsMesh3dEntity::build()

void QgsMeshDataset3dEntity::buildGeometry()
{
Qt3DRender::QGeometryRenderer *mesh = new Qt3DRender::QGeometryRenderer;

if ( !layer() )
return;

Qt3DRender::QGeometryRenderer *mesh = new Qt3DRender::QGeometryRenderer;
mesh->setGeometry( new QgsMeshDataset3dGeometry( layer(), mMapSettings.temporalRange(), mMapSettings.origin(), mSymbol, mesh ) );
addComponent( mesh );
}
Expand Down Expand Up @@ -82,11 +81,10 @@ QgsMesh3dTerrainTileEntity::QgsMesh3dTerrainTileEntity( const Qgs3DMapSettings &

void QgsMesh3dTerrainTileEntity::buildGeometry()
{
Qt3DRender::QGeometryRenderer *mesh = new Qt3DRender::QGeometryRenderer;

if ( !layer() )
return;

Qt3DRender::QGeometryRenderer *mesh = new Qt3DRender::QGeometryRenderer;
mesh->setGeometry( new QgsMeshTerrain3dGeometry( layer(), mMapSettings.origin(), mSymbol, mesh ) );
addComponent( mesh );
}
Expand Down
2 changes: 2 additions & 0 deletions src/3d/symbols/qgspoint3dsymbol.h
Expand Up @@ -112,6 +112,8 @@ class _3D_EXPORT QgsPoint3DSymbol : public QgsAbstract3DSymbol
std::unique_ptr<QgsMarkerSymbol> mBillboardSymbol;
#ifdef SIP_RUN
QgsPoint3DSymbol &operator=( const QgsPoint3DSymbol & );
#else
QgsPoint3DSymbol &operator=( const QgsPoint3DSymbol & ) = delete;
#endif
};

Expand Down
2 changes: 1 addition & 1 deletion src/analysis/processing/qgsalgorithmgrid.cpp
Expand Up @@ -286,7 +286,7 @@ void QgsGridAlgorithm::createLineGrid( std::unique_ptr< QgsFeatureSink > &sink,

while ( x <= mGridExtent.xMaximum() )
{
if ( feedback && feedback->isCanceled() )
if ( feedback->isCanceled() )
break;

QgsPoint pt1 = QgsPoint( x, mGridExtent.yMaximum() );
Expand Down
4 changes: 2 additions & 2 deletions src/analysis/processing/qgsalgorithmrandompointsextent.cpp
Expand Up @@ -113,7 +113,7 @@ QVariantMap QgsRandomPointsExtentAlgorithm::processAlgorithm( const QVariantMap
int i = 0;
while ( i < mNumPoints )
{
if ( feedback && feedback->isCanceled() )
if ( feedback->isCanceled() )
break;

double rx = x_distribution( random_device );
Expand All @@ -136,7 +136,7 @@ QVariantMap QgsRandomPointsExtentAlgorithm::processAlgorithm( const QVariantMap
int i = 0;
while ( i < mNumPoints )
{
if ( feedback && feedback->isCanceled() )
if ( feedback->isCanceled() )
break;

double rx = x_distribution( random_device );
Expand Down
2 changes: 1 addition & 1 deletion src/analysis/processing/qgsalgorithmzonalhistogram.cpp
Expand Up @@ -116,7 +116,7 @@ QVariantMap QgsZonalHistogramAlgorithm::processAlgorithm( const QVariantMap &par
QgsFeature f;
while ( it.nextFeature( f ) )
{
if ( feedback && feedback->isCanceled() )
if ( feedback->isCanceled() )
{
break;
}
Expand Down
Expand Up @@ -180,6 +180,8 @@ class ANALYSIS_EXPORT QgsGeometryCheckerUtils
QgsFeatureIds::const_iterator mFeatureIt;
const LayerFeatures *mParent = nullptr;
std::unique_ptr<QgsGeometryCheckerUtils::LayerFeature> mCurrentFeature;

iterator &operator= ( const iterator & ) = delete;
};

/**
Expand Down
50 changes: 25 additions & 25 deletions src/analysis/vector/qgszonalstatistics.cpp
Expand Up @@ -173,31 +173,31 @@ int QgsZonalStatistics::calculateStatistics( QgsFeedback *feedback )
vectorProvider->addAttributes( newFieldList );

//index of the new fields
int countIndex = mStatistics & QgsZonalStatistics::Count ? vectorProvider->fieldNameIndex( countFieldName ) : -1;
int sumIndex = mStatistics & QgsZonalStatistics::Sum ? vectorProvider->fieldNameIndex( sumFieldName ) : -1;
int meanIndex = mStatistics & QgsZonalStatistics::Mean ? vectorProvider->fieldNameIndex( meanFieldName ) : -1;
int medianIndex = mStatistics & QgsZonalStatistics::Median ? vectorProvider->fieldNameIndex( medianFieldName ) : -1;
int stdevIndex = mStatistics & QgsZonalStatistics::StDev ? vectorProvider->fieldNameIndex( stdevFieldName ) : -1;
int minIndex = mStatistics & QgsZonalStatistics::Min ? vectorProvider->fieldNameIndex( minFieldName ) : -1;
int maxIndex = mStatistics & QgsZonalStatistics::Max ? vectorProvider->fieldNameIndex( maxFieldName ) : -1;
int rangeIndex = mStatistics & QgsZonalStatistics::Range ? vectorProvider->fieldNameIndex( rangeFieldName ) : -1;
int minorityIndex = mStatistics & QgsZonalStatistics::Minority ? vectorProvider->fieldNameIndex( minorityFieldName ) : -1;
int majorityIndex = mStatistics & QgsZonalStatistics::Majority ? vectorProvider->fieldNameIndex( majorityFieldName ) : -1;
int varietyIndex = mStatistics & QgsZonalStatistics::Variety ? vectorProvider->fieldNameIndex( varietyFieldName ) : -1;
int varianceIndex = mStatistics & QgsZonalStatistics::Variance ? vectorProvider->fieldNameIndex( varianceFieldName ) : -1;

if ( ( mStatistics & QgsZonalStatistics::Count && countIndex == -1 )
|| ( mStatistics & QgsZonalStatistics::Sum && sumIndex == -1 )
|| ( mStatistics & QgsZonalStatistics::Mean && meanIndex == -1 )
|| ( mStatistics & QgsZonalStatistics::Median && medianIndex == -1 )
|| ( mStatistics & QgsZonalStatistics::StDev && stdevIndex == -1 )
|| ( mStatistics & QgsZonalStatistics::Min && minIndex == -1 )
|| ( mStatistics & QgsZonalStatistics::Max && maxIndex == -1 )
|| ( mStatistics & QgsZonalStatistics::Range && rangeIndex == -1 )
|| ( mStatistics & QgsZonalStatistics::Minority && minorityIndex == -1 )
|| ( mStatistics & QgsZonalStatistics::Majority && majorityIndex == -1 )
|| ( mStatistics & QgsZonalStatistics::Variety && varietyIndex == -1 )
|| ( mStatistics & QgsZonalStatistics::Variance && varianceIndex == -1 )
int countIndex = ( mStatistics & QgsZonalStatistics::Count ) ? vectorProvider->fieldNameIndex( countFieldName ) : -1;
int sumIndex = ( mStatistics & QgsZonalStatistics::Sum ) ? vectorProvider->fieldNameIndex( sumFieldName ) : -1;
int meanIndex = ( mStatistics & QgsZonalStatistics::Mean ) ? vectorProvider->fieldNameIndex( meanFieldName ) : -1;
int medianIndex = ( mStatistics & QgsZonalStatistics::Median ) ? vectorProvider->fieldNameIndex( medianFieldName ) : -1;
int stdevIndex = ( mStatistics & QgsZonalStatistics::StDev ) ? vectorProvider->fieldNameIndex( stdevFieldName ) : -1;
int minIndex = ( mStatistics & QgsZonalStatistics::Min ) ? vectorProvider->fieldNameIndex( minFieldName ) : -1;
int maxIndex = ( mStatistics & QgsZonalStatistics::Max ) ? vectorProvider->fieldNameIndex( maxFieldName ) : -1;
int rangeIndex = ( mStatistics & QgsZonalStatistics::Range ) ? vectorProvider->fieldNameIndex( rangeFieldName ) : -1;
int minorityIndex = ( mStatistics & QgsZonalStatistics::Minority ) ? vectorProvider->fieldNameIndex( minorityFieldName ) : -1;
int majorityIndex = ( mStatistics & QgsZonalStatistics::Majority ) ? vectorProvider->fieldNameIndex( majorityFieldName ) : -1;
int varietyIndex = ( mStatistics & QgsZonalStatistics::Variety ) ? vectorProvider->fieldNameIndex( varietyFieldName ) : -1;
int varianceIndex = ( mStatistics & QgsZonalStatistics::Variance ) ? vectorProvider->fieldNameIndex( varianceFieldName ) : -1;

if ( ( ( mStatistics & QgsZonalStatistics::Count ) && countIndex == -1 )
|| ( ( mStatistics & QgsZonalStatistics::Sum ) && sumIndex == -1 )
|| ( ( mStatistics & QgsZonalStatistics::Mean ) && meanIndex == -1 )
|| ( ( mStatistics & QgsZonalStatistics::Median ) && medianIndex == -1 )
|| ( ( mStatistics & QgsZonalStatistics::StDev ) && stdevIndex == -1 )
|| ( ( mStatistics & QgsZonalStatistics::Min ) && minIndex == -1 )
|| ( ( mStatistics & QgsZonalStatistics::Max ) && maxIndex == -1 )
|| ( ( mStatistics & QgsZonalStatistics::Range ) && rangeIndex == -1 )
|| ( ( mStatistics & QgsZonalStatistics::Minority ) && minorityIndex == -1 )
|| ( ( mStatistics & QgsZonalStatistics::Majority ) && majorityIndex == -1 )
|| ( ( mStatistics & QgsZonalStatistics::Variety ) && varietyIndex == -1 )
|| ( ( mStatistics & QgsZonalStatistics::Variance ) && varianceIndex == -1 )
)
{
//failed to create a required field
Expand Down

0 comments on commit b4f5b48

Please sign in to comment.