Use CI environment for clang/clazy

In order to be able to also do this with Qt6 we can't currently rely on
'random distro' to be able to give us an environment sufficient for
running clang and clazy, so use the CI system setup instead

A side effect is that we get a newer clazy and clang-tidy and thus is a
few more issues to either ignore or fix.

Also, ask ninja to continue as long as possible rather than stop at
first error to be able to get succes in as few runs as possible
This commit is contained in:
Sune Vuorela 2023-12-12 13:04:14 +01:00
parent ba6db9db04
commit a9717a8e5f
8 changed files with 53 additions and 32 deletions

View file

@ -1,5 +1,5 @@
---
Checks: 'clang-diagnostic-*,clang-analyzer-*,-*,performance-*,bugprone-*,readability-inconsistent-declaration-parameter-name,readability-string-compare,readability-braces-around-statements,modernize-redundant-void-arg,modernize-use-bool-literals,modernize-make-unique,modernize-make-shared,modernize-use-override,modernize-use-equals-delete,modernize-use-emplace,modernize-loop-convert,modernize-use-nullptr,google-explicit-constructor,-bugprone-macro-parentheses,-bugprone-narrowing-conversions,-bugprone-branch-clone,-bugprone-incorrect-roundings,-bugprone-suspicious-include,-bugprone-reserved-identifier,-performance-no-automatic-move,-bugprone-suspicious-enum-usage,-bugprone-easily-swappable-parameters,-performance-no-int-to-ptr,-bugprone-implicit-widening-of-multiplication-result'
Checks: 'clang-diagnostic-*,clang-analyzer-*,-*,performance-*,bugprone-*,readability-inconsistent-declaration-parameter-name,readability-string-compare,readability-braces-around-statements,modernize-redundant-void-arg,modernize-use-bool-literals,modernize-make-unique,modernize-make-shared,modernize-use-override,modernize-use-equals-delete,modernize-use-emplace,modernize-loop-convert,modernize-use-nullptr,google-explicit-constructor,-bugprone-assignment-in-if-condition,-bugprone-switch-missing-default-case,-bugprone-macro-parentheses,-bugprone-narrowing-conversions,-bugprone-branch-clone,-bugprone-incorrect-roundings,-bugprone-suspicious-include,-bugprone-reserved-identifier,-performance-no-automatic-move,-bugprone-suspicious-enum-usage,-bugprone-easily-swappable-parameters,-performance-no-int-to-ptr,-bugprone-implicit-widening-of-multiplication-result,-performance-unnecessary-copy-initialization,-bugprone-suspicious-realloc-usage,'
WarningsAsErrors: '*'
HeaderFilterRegex: '.*/okular/.*'
AnalyzeTemporaryDtors: false

View file

@ -30,28 +30,47 @@ include:
build_clazy_clang_tidy:
stage: build
image: debian:unstable
image: invent-registry.kde.org/sysadmin/ci-images/suse-qt515:latest
tags:
- Linux
interruptible: true
before_script:
- git clone https://invent.kde.org/sysadmin/ci-utilities.git --depth=1
- git clone https://invent.kde.org/sysadmin/repo-metadata.git ci-utilities/repo-metadata/ --depth=1
only:
- merge_requests
before_script:
- echo 'deb-src http://deb.debian.org/debian unstable main' >> /etc/apt/sources.list
- apt-get update
- apt-get install --yes eatmydata
- eatmydata apt-get build-dep --yes --no-install-recommends okular
- eatmydata apt-get install --yes --no-install-recommends ninja-build clazy clang clang-tidy-14 libqt5x11extras5-dev libkf5crash-dev libkf5purpose-dev kirigami2-dev libegl-dev jq
variables:
KDECI_CC_CACHE: /mnt/caches/suse-qt5.15/
KDECI_CACHE_PATH: /mnt/artifacts/suse-qt5.15/
KDECI_GITLAB_SERVER: https://invent.kde.org/
KDECI_PACKAGE_PROJECT: teams/ci-artifacts/suse-qt5.15
CLAZY_CHECKS: level0,level1,level2,no-ctor-missing-parent-argument,isempty-vs-count,qhash-with-char-pointer-key,raw-environment-function,qproperty-type-mismatch,no-no-module-include
CXXFLAGS: -Werror -Wno-deprecated-declarations
CC: clang
CXX: clazy
script:
- srcdir=`pwd` && mkdir -p /tmp/okular_build && cd /tmp/okular_build && CC=clang CXX=clazy CXXFLAGS="-Werror -Wno-deprecated-declarations" cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja $srcdir && cat compile_commands.json | jq '[.[] | select(.file | contains("'"$srcdir"'"))]' > compile_commands.aux.json && cat compile_commands.aux.json | jq '[.[] | select(.file | contains("/synctex/")| not)]' > compile_commands.json && cp "$srcdir/.clang-tidy" .
- CLAZY_IGNORE_DIRS="settings_core.[cpp|h]|settings.[cpp.h]|pdfsettings.h|gssettings.h|ui_selectcertificatedialog.h" CLAZY_CHECKS="level0,level1,level2,no-ctor-missing-parent-argument,isempty-vs-count,qhash-with-char-pointer-key,raw-environment-function,qproperty-type-mismatch" ninja
- run-clang-tidy-14
- git config --global --add safe.directory $CI_PROJECT_DIR
- python3 -u ci-utilities/run-ci-build.py --project $CI_PROJECT_NAME --branch $CI_COMMIT_REF_NAME --platform Linux/Qt5/Shared --only-setup-environment
# Default UI
- mkdir -p /tmp/okular_build
- cd /tmp/okular_build
- cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja -DCMAKE_INSTALL_PREFIX=$CI_PROJECT_DIR/_install -DFORCE_NOT_REQUIRED_DEPENDENCIES=KF5DocTools -DKF5DocTools_FOUND=false $CI_PROJECT_DIR
- cat compile_commands.json | jq '[.[] | select(.file | contains("'"$CI_PROJECT_DIR"'"))]' > compile_commands.aux.json
- cat compile_commands.aux.json | jq '[.[] | select(.file | contains("/synctex/")| not)]' > compile_commands.json
- cp "$CI_PROJECT_DIR/.clang-tidy" .
- CLAZY_IGNORE_DIRS="settings_core.[cpp|h]|settings.[cpp.h]|pdfsettings.h|gssettings.h|ui_selectcertificatedialog.h" ninja -k 0
- run-clang-tidy
- rm -rf *
# Mobile UI
- echo "Now compiling the mobile UI"
- cd "$CI_PROJECT_DIR"
- srcdir=`pwd` && mkdir -p /tmp/okular_build && cd /tmp/okular_build && CC=clang CXX=clazy CXXFLAGS="-Werror -Wno-deprecated-declarations" cmake -DOKULAR_UI=mobile -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja $srcdir && cat compile_commands.json | jq '[.[] | select(.file | contains("'"$srcdir"'"))]' > compile_commands.aux.json && cat compile_commands.aux.json | jq '[.[] | select(.file | contains("/synctex/")| not)]' > compile_commands.json && cp "$srcdir/.clang-tidy" .
- CLAZY_IGNORE_DIRS="settings_mobile.[cpp|h]|settings.[cpp.h]|pdfsettings.h|gssettings.h" CLAZY_CHECKS="level0,level1,level2,no-ctor-missing-parent-argument,isempty-vs-count,qhash-with-char-pointer-key,raw-environment-function,qproperty-type-mismatch" ninja
- run-clang-tidy-14
- mkdir -p /tmp/okular_build
- cd /tmp/okular_build
- cmake -DOKULAR_UI=mobile -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja -DCMAKE_INSTALL_PREFIX=$CI_PROJECT_DIR/_install -DFORCE_NOT_REQUIRED_DEPENDENCIES=KF5DocTools -DKF5DocTools_FOUND=false $CI_PROJECT_DIR
- cat compile_commands.json | jq '[.[] | select(.file | contains("'"$CI_PROJECT_DIR"'"))]' > compile_commands.aux.json
- cat compile_commands.aux.json | jq '[.[] | select(.file | contains("/synctex/")| not)]' > compile_commands.json
- cp "$CI_PROJECT_DIR/.clang-tidy" .
- CLAZY_IGNORE_DIRS="settings_mobile.[cpp|h]|settings.[cpp.h]|pdfsettings.h|gssettings.h" ninja -k 0
- run-clang-tidy
clang_format:
stage: build

View file

@ -397,6 +397,7 @@ void DocumentPrivate::cleanupPixmapMemory(qulonglong memoryToFree)
}
m_allocatedPixmaps.splice(m_allocatedPixmaps.end(), pixmapsToKeep);
Q_UNUSED(pagesFreed);
// p--rintf("freeMemory A:[%d -%d = %d] \n", m_allocatedPixmaps.count() + pagesFreed, pagesFreed, m_allocatedPixmaps.count() );
}
@ -2764,7 +2765,7 @@ void Document::closeDocument()
// reset internal variables
d->m_viewportHistory.clear();
d->m_viewportHistory.emplace_back(DocumentViewport());
d->m_viewportHistory.emplace_back();
d->m_viewportIterator = d->m_viewportHistory.begin();
d->m_allocatedPixmapsTotalMemory = 0;
d->m_allocatedTextPagesFifo.clear();

View file

@ -509,13 +509,11 @@ RegularAreaRect *TextPage::textArea(TextSelection *sel) const
else {
selection_two_start = true;
int distance = scaleX + scaleY + 100;
int count = 0;
for (; it != itEnd; ++it) {
rect = (*it)->area;
if (rect.isBottomOrLevel(startC) && rect.isRight(startC)) {
count++;
QRect entRect = rect.geometry(scaleX, scaleY);
int xdist, ydist;
xdist = entRect.center().x() - startC.x * scaleX;
@ -1035,7 +1033,6 @@ static WordsWithCharacters makeWordFromCharacters(const TextList &characters, in
TextList::ConstIterator it = characters.begin(), itEnd = characters.end(), tmpIt;
int newLeft, newRight, newTop, newBottom;
int index = 0;
for (; it != itEnd; it++) {
QString textString = (*it)->text();
@ -1102,8 +1099,6 @@ static WordsWithCharacters makeWordFromCharacters(const TextList &characters, in
const NormalizedRect newRect(lineArea, pageWidth, pageHeight);
TinyTextEntity *word = new TinyTextEntity(newString.normalized(QString::NormalizationForm_KC), newRect);
wordsWithCharacters.append(WordWithCharacters(word, wordCharacters));
index++;
}
if (it == itEnd) {

View file

@ -77,7 +77,11 @@ void Converter::convertAgain()
QTextDocument *Converter::convertOpenFile()
{
rewind(m_markdownFile);
int result = fseek(m_markdownFile, 0, SEEK_SET);
if (result != 0) {
Q_EMIT error(i18n("Failed to open the document"), -1);
return nullptr;
}
#if defined(MKD_NOLINKS)
// on discount 2 MKD_NOLINKS is a define

View file

@ -41,10 +41,12 @@ static QString popplerEnumToUserString(Poppler::CryptoSignBackend backend)
std::optional<Poppler::CryptoSignBackend> PDFSettingsWidget::settingStringToPopplerEnum(QStringView backend)
{
if (backend == QStringLiteral("NSS"))
if (backend == QStringLiteral("NSS")) {
return Poppler::CryptoSignBackend::NSS;
if (backend == QStringLiteral("GPG"))
}
if (backend == QStringLiteral("GPG")) {
return Poppler::CryptoSignBackend::GPG;
}
return std::nullopt;
}
#endif
@ -87,7 +89,7 @@ PDFSettingsWidget::PDFSettingsWidget(QWidget *parent)
m_pdfsw.kcfg_SignatureBackend->setProperty("kcfg_property", QByteArray("currentData"));
m_pdfsw.kcfg_SignatureBackend->setCurrentIndex(selected);
connect(m_pdfsw.kcfg_SignatureBackend, &QComboBox::currentTextChanged, [this](const QString &text) {
connect(m_pdfsw.kcfg_SignatureBackend, &QComboBox::currentTextChanged, this, [this](const QString &text) {
auto backendEnum = settingStringToPopplerEnum(text);
if (!backendEnum) {
return;

View file

@ -26,7 +26,7 @@ public:
explicit PDFSettingsWidget(QWidget *parent = nullptr);
bool event(QEvent *e) override;
#if POPPLER_VERSION_MACRO >= QT_VERSION_CHECK(23, 06, 0)
static std::optional<Poppler::CryptoSignBackend> settingStringToPopplerEnum(QStringView string);
static std::optional<Poppler::CryptoSignBackend> settingStringToPopplerEnum(QStringView backend);
static QString popplerEnumToSettingString(Poppler::CryptoSignBackend backend);
#endif

View file

@ -789,10 +789,10 @@ void XpsPage::processGlyph(QPainter *painter, XpsRenderNode &node)
att = node.attributes.value(QStringLiteral("Indices")).toString();
QList<qreal> advanceWidths;
if (!att.isEmpty()) {
QStringList indicesElements = att.split(QLatin1Char(';'));
for (int i = 0; i < indicesElements.size(); ++i) {
if (indicesElements.at(i).contains(QStringLiteral(","))) {
QStringList parts = indicesElements.at(i).split(QLatin1Char(','));
const QStringList indicesElements = att.split(QLatin1Char(';'));
for (const QString &indicesElement : indicesElements) {
if (indicesElements.contains(QStringLiteral(","))) {
const QStringList parts = indicesElement.split(QLatin1Char(','));
if (parts.size() == 2) {
// regular advance case, no offsets
advanceWidths.append(parts.at(1).toDouble() * fontSize / 100.0);
@ -803,7 +803,7 @@ void XpsPage::processGlyph(QPainter *painter, XpsRenderNode &node)
advanceWidths.append(AdvanceWidth + uOffset);
} else {
// has vertical offset, but don't know how to handle that yet
qCWarning(OkularXpsDebug) << "Unhandled Indices element: " << indicesElements.at(i);
qCWarning(OkularXpsDebug) << "Unhandled Indices element: " << indicesElement;
advanceWidths.append(-1.0);
}
} else {