File indexing completed on 2024-05-19 04:19:13

0001 #!/bin/bash
0002 
0003 # SPDX-FileCopyrightText: 2013-2024 by Gilles Caulier, <caulier dot gilles at gmail dot com>
0004 #
0005 # Run Clazy analyzer on whole digiKam source code.
0006 # https://github.com/KDE/clazy
0007 # Dependencies : Python BeautifulSoup and SoupSieve at run-time.
0008 #
0009 # If '--nowebupdate' is passed as argument, static analyzer results are just created locally.
0010 #
0011 # SPDX-License-Identifier: BSD-3-Clause
0012 #
0013 
0014 # Halt and catch errors
0015 set -eE
0016 trap 'PREVIOUS_COMMAND=$THIS_COMMAND; THIS_COMMAND=$BASH_COMMAND' DEBUG
0017 trap 'echo "FAILED COMMAND: $PREVIOUS_COMMAND"' ERR
0018 
0019 . ./common.sh
0020 
0021 # Check run-time dependencies
0022 
0023 if [ ! -f /usr/bin/clazy ] ; then
0024 
0025     echo "Clazy static analyzer is not installed in /opt/clazy."
0026     echo "Please install Clazy from https://github.com/KDE/clazy"
0027     echo "Aborted..."
0028     exit -1
0029 
0030 
0031 else
0032 
0033     echo "Check Clazy static analyzer passed..."
0034 
0035 fi
0036 
0037 checksCPUCores
0038 
0039 ORIG_WD="`pwd`"
0040 REPORT_DIR="${ORIG_WD}/report.clazy"
0041 WEBSITE_DIR="${ORIG_WD}/site"
0042 
0043 # Get active git branches to create report description string
0044 TITLE="digiKam-$(parseGitBranch)$(parseGitHash)"
0045 echo "Clazy Static Analyzer task name: $TITLE"
0046 
0047 # Do not parse unwanted directories accordingly with Krazy configuration.
0048 krazySkipConfig
0049 
0050 IGNORE_DIRS=".*include.*|"
0051 
0052 for DROP_ITEM in $KRAZY_FILTERS ; do
0053     IGNORE_DIRS+=".*$DROP_ITEM.*|"
0054 done
0055 
0056 # Remove last character
0057 IGNORE_DIRS=${IGNORE_DIRS::-1}
0058 
0059 export CLAZY_IGNORE_DIRS=$IGNORE_DIRS
0060 export CLAZY_CHECKS="\
0061 level2,\
0062 no-fully-qualified-moc-types,\
0063 no-qproperty-without-notify,\
0064 no-old-style-connect,\
0065 no-rule-of-three,\
0066 no-inefficient-qlist-soft,\
0067 no-qstring-allocations,\
0068 no-qstring-arg,\
0069 no-qstring-insensitive-allocation,\
0070 no-qstring-ref,\
0071 no-function-args-by-value,\
0072 qt6-qhash-signature,\
0073 qt6-deprecated-api-fixes,\
0074 qt6-fwd-fixes,\
0075 qt6-header-fixes,\
0076 unexpected-flag-enumerator-value,\
0077 signal-with-return-value,\
0078 raw-environment-function,\
0079 qt-keywords,\
0080 missing-qobject-macro\
0081 "
0082 
0083 #qt6-qlatin1stringchar-to-u         What is that exactly ???
0084 
0085 echo "IGNORE DIRECTORIES:     $CLAZY_IGNORE_DIRS"
0086 echo "CHECKERS CONFIGURATION: $CLAZY_CHECKS"
0087 
0088 # Clean up and prepare to scan.
0089 
0090 rm -fr $REPORT_DIR
0091 rm -fr $WEBSITE_DIR
0092 mkdir -p $REPORT_DIR
0093 
0094 cd ../..
0095 
0096 rm -fr build.clazy
0097 mkdir -p build.clazy
0098 cd build.clazy
0099 
0100 cmake -G "Unix Makefiles" . \
0101       -DCMAKE_BUILD_TYPE=debug \
0102       -DCMAKE_CXX_COMPILER=clazy \
0103       -DBUILD_TESTING=ON \
0104       -DDIGIKAMSC_CHECKOUT_PO=OFF \
0105       -DDIGIKAMSC_CHECKOUT_DOC=OFF \
0106       -DDIGIKAMSC_COMPILE_PO=OFF \
0107       -DDIGIKAMSC_COMPILE_DOC=OFF \
0108       -DENABLE_KFILEMETADATASUPPORT=ON \
0109       -DENABLE_AKONADICONTACTSUPPORT=ON \
0110       -DENABLE_MYSQLSUPPORT=ON \
0111       -DENABLE_INTERNALMYSQL=ON \
0112       -DENABLE_MEDIAPLAYER=ON \
0113       -DENABLE_QTMULTIMEDIA=ON \
0114       -DENABLE_DBUS=ON \
0115       -DENABLE_APPSTYLES=ON \
0116       -DENABLE_QWEBENGINE=ON \
0117       -Wno-dev \
0118       ..
0119 
0120 make -j$CPU_CORES 2> ${REPORT_DIR}/trace.log
0121 
0122 cd $ORIG_WD
0123 
0124 python3 ./clazy_visualizer.py $REPORT_DIR/trace.log
0125 
0126 rm -f $REPORT_DIR/trace.log
0127 mv clazy.html $REPORT_DIR/index.html
0128 
0129 if [[ $1 != "--nowebupdate" ]] ; then
0130 
0131     # update www.digikam.org report section.
0132     updateReportToWebsite "clazy" $REPORT_DIR $TITLE $(parseGitBranch)
0133 
0134 fi
0135 
0136 cd $ORIG_DIR