User:Nmariusp/Easy: Difference between revisions

From KDE Community Wiki
(→‎cmakelint: Add example of usage)
 
(7 intermediate revisions by the same user not shown)
Line 3: Line 3:
Below are some easy ways to do merge requests (MR) for the KDE git repositories. And easy ways to contribute to the KDE Community.
Below are some easy ways to do merge requests (MR) for the KDE git repositories. And easy ways to contribute to the KDE Community.


You can find [https://develop.kde.org/docs/getting-started/building/ide/qt-creator/ here instructions on how to open a KDE git repository in the IDE Qt Creator]. After you build that KDE git repository using kdesrc-build.
You can find instructions on how to open a KDE git repository in the IDE [https://community.kde.org/User:Nmariusp/Qt_Creator Qt Creator] and [https://community.kde.org/User:Nmariusp/Clion JetBrains CLion]. After you build that KDE git repository using kdesrc-build.


See similar lists and web pages for more ideas [[Marble/GoMarble/JJ|Marble]], [[Calligra/Testing#Static_Code_Analysis|Calligra]], [[Guidelines_and_HOWTOs/Code_Checking|1]], [https://chromium.googlesource.com/chromium/src/+/lkgr/docs/clang_static_analyzer.md 2].
See similar lists and web pages for more ideas [[Marble/GoMarble/JJ|Marble]], [[Calligra/Testing#Static_Code_Analysis|Calligra]], [[Guidelines_and_HOWTOs/Code_Checking|1]], [https://chromium.googlesource.com/chromium/src/+/lkgr/docs/clang_static_analyzer.md 2].
Line 9: Line 9:
== You should be able to build all 400 KDE git repositories using kdesrc-build ==
== You should be able to build all 400 KDE git repositories using kdesrc-build ==


From time to time, make sure that all the KDE git repositories (continue to) build correctly using kdesrc-build. Run:
Have a long list of KDE modules which you build from time to time using kde-builder. Make sure that all the KDE git repositories continue to build correctly using kde-builder. If a KDE git repository was building successfully last week,
kdesrc-build
but does not build successfully today, invest time to investigate why it stopped building in a timeboxed manner. E.g. invest 10 minutes. Then, if needed, ask in the KDE Matrix room "KDE New Contributors" ( https://community.kde.org/Matrix ) if this module is supposed to build.
without parameters. That will build all 400 KDE git repositories. If a KDE git repository was building successfully last week,
but does not build successfully today, invest time to investigate why it stopped building in a timeboxed manner. E.g. invest 10 minutes. Then, if needed, ask in the KDE Matrix room "KDE New Contributors" ( https://go.kde.org/matrix/#/#new-contributors:kde.org https://community.kde.org/Matrix ) if this module is supposed to build.


Example: let's say that kcalc does not build.
Example: let's say that kcalc does not build.
Line 32: Line 30:
=== Proofreading a KDE app handbook ===
=== Proofreading a KDE app handbook ===


Find a random KDE app https://apps.kde.org/ . E.g. KBreakOut https://apps.kde.org/kbreakout. In the right side of the web page > "Get help KBreakOut Handbook" > open the PDF version of the newest documentation for KBreakOut e.g. "Development (Frameworks 5) (PDF)". Select all of the text of the PDF e.g. if the PDF opens in Mozila Firefox right click on the content of the PDF > Select All > right click > Copy. Paste in a grammar checker and run a grammar check. E.g. create a new Google Doc, from the Google Docs main menu > Tools > Spelling and grammar > Spelling and grammar check. Or e.g. search on Google for "online grammar", open in new tabs dome of the online grammar checking web pages, in one of these pages paste the entire content of the PDF and run the grammar check. E.g. not all grammar checkers will detect missing commas.
Find a random KDE app https://apps.kde.org/ . E.g. KBreakOut https://apps.kde.org/kbreakout. In the right side of the web page > "Get help" > "KBreakOut Handbook" > open the PDF version of the newest documentation for KBreakOut e.g. "Development (Frameworks 5) (PDF)". Select all of the text of the PDF e.g. if the PDF opens in Mozila Firefox right click on the content of the PDF > Select All > right click > Copy. Paste in a grammar checker and run a grammar check. E.g. create a new Google Doc, from the Google Docs main menu > Tools > Spelling and grammar > Spelling and grammar check. Or e.g. search on Google for "online grammar", open in new tabs some of the online grammar checking web pages, in one of these pages paste the entire content of the PDF and run the grammar check. E.g. not all grammar checkers will detect missing commas. There is also LibreOffice Write, Microsoft Word, Grammarly.


== Just running kdesrc-build should not create "Unstaged Changes" in the local clone of a KDE git repo==
== Just running kdesrc-build should not create "Unstaged Changes" in the local clone of a KDE git repo==
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: normal;">
<pre>
Build all the KDE git repositories using kdesrc-build. Run:
Build a (random) KDE git repository using kdesrc-build. kdesrc-build should not display the text:
kdesrc-build
"* You had local changes to <ModuleName>, which have been re-applied."
You should not see displayed the text:
* You had local changes to <ModuleName>, which have been re-applied.


In this case the issue is probably that the .gitignore file in the git repo is outdated.
In this case the issue is probably that the .gitignore file in the git repo is outdated.
Line 327: Line 323:


=== cmakelint ===
=== cmakelint ===
Video version https://www.youtube.com/watch?v=hRqKBgfOfks


Install https://github.com/cmake-lint/cmake-lint .
Install https://github.com/cmake-lint/cmake-lint .
Line 361: Line 359:
code .
code .
# From the VS Code main menu > View > Terminal Ctrl+` . Run:
# From the VS Code main menu > View > Terminal Ctrl+` . Run:
for i in `find . -type f -name "CMakeLists.txt"`; do cmakelint --linelength=2000 "$i"; done
for i in `find . -type f \( -name "CMakeLists.txt" -o -name "*.cmake" \)`; do cmakelint --linelength=2000 "$i"; done
# In the terminal, if issues have been found, Ctrl+click on the file name of an issue.
# In the terminal, if issues have been found, Ctrl+click on the file name of an issue.
</pre>
</pre>
Line 580: Line 578:


If using <code>tee</code>, part of the output of kdesrc-build will not be written to file. E.g. the output of the <code>cmake</code> step, the final part of the <code>make -j</code> step, the final part of the <code>make install</code> step.
If using <code>tee</code>, part of the output of kdesrc-build will not be written to file. E.g. the output of the <code>cmake</code> step, the final part of the <code>make -j</code> step, the final part of the <code>make install</code> step.
=== Ignore everything below ===
Ideas for Merge Requests (MRs) that can be done in under half an hour
If you are a C++ developer and want to invest 30 minutes, you can create a merge request (MR) towards a KDE git repository.
Go to https://community.kde.org/Get_Involved/development/Easy .
The spirit of the page https://community.kde.org/Get_Involved/development/Easy is: "I am a C++ developer already. What can I do such that in a short amount of work hours per week I can do some Merge Requests that will actually be merged".
The opposite is "I have worked on a single issue from bugs.kde.org. It took me 40 work hours, I only work 2 hours per week, therefore I only did one Merge Request in 4 months. And because the MR was too long, it was never merged".
Do many small easy Merge Requests (MRs) vs bugs.kde.org.
If I were to start programming for KDE, I would ignore the KDE bugs. And instead do for a number of weeks a large number of simple Merge Requests (MRs).
Working on a simple KDE bug takes 5 hours easily if you know all of the prerequisites: e.g. C++, how to build a KDE git repo using kdesrc-build, how to use Qt Creator as an IDE with CMake integration and debugger for a KDE git repo, if you have read this KDE wiki page and all of its children pages https://community.kde.org/Get_Involved/development. https://www.youtube.com/watch?v=yil21FDAuMY
I vote that people that start programming for KDE should do easy MRs for at least a month (one MR per worked hour). This will be ~ 2 work hours per week, ~2 MRs per week, ~8 MRs per month. Only after this you should start working on issues from bugs.kde.org.
TODO: delete everything below. The canonical place for the rest of this page is https://community.kde.org/Get_Involved/development/Easy .
Below are some easy ways to do merge requests (MR) for the KDE git repositories. And easy ways to contribute to the KDE Community.
You can find [[Get_Involved/development/IDE_configuration/Qt_Creator|here instructions on how to open a KDE git repository in the IDE Qt Creator]]. After you build that KDE git repository using kdesrc-build.
You should be able to build all 400 KDE git repositories using kdesrc-build
From time to time, make sure that all the KDE git repositories (continue to) build correctly using kdesrc-build. Run:
kdesrc-build
without parameters. That will build all 400 KDE git repositories. If a KDE git repository was building successfully last week,
but does not build successfully today, invest time to investigate why it stopped building in a timeboxed manner. E.g. invest 10 minutes. Then, if needed, ask in the KDE Matrix room "KDE New Contributors" ( https://go.kde.org/matrix/#/#kde-welcome:kde.org https://community.kde.org/Matrix ) if this module is supposed to build.
Example: let's say that kcalc does not build.
In konsole, I would run:
kdesrc-build kcalc --no-src --no-include-dependencies --refresh-build --debug |& tee ~/a.txt
In the web browser create a pastebin. E.g. https://pastebin.centos.org/ Paste the contents of the file ~/a.txt.
Paste the URL of the new pastebin in the KDE matrix channel when requesting help.
Just running kdesrc-build should not create "Unstaged Changes" in the local clone of a KDE git repo
Build all the KDE git repositories using kdesrc-build. Run:
kdesrc-build
You should not see displayed the text:
* You had local changes to , which have been re-applied.
In this case the issue is probably that the .gitignore file in the git repo is outdated.
E.g.
Install meld.
Let's say that kcalc is the git repo that reproduces this issue. You should have seen the text:
"* You had local changes to kcalc, which have been re-applied."
In konsole: I would run:
meld ~/kde/src/kconfig/.gitignore ~/kde/src/kcalc/.gitignore
In the diff viewer I can see that the last two lines in the file
~/kde/src/frameworks/kconfig/.gitignore are new and do not exist yet in
~/kde/src/utilities/kcalc/.gitignore. I copy the new lines to ~/kde/src/utilities/kcalc/.gitignore
such that the two .gitignore files are identical.
Then I do a MR like https://invent.kde.org/graphics/kamera/-/merge_requests/5
Fix proofreading, grammar, spellchecking issues in the source code
Build a KDE git repository using kdesrc-build. Open it in the IDE JetBrains CLion. From CLion main menu > Code > Inspect Code… > Specify Inspection Scope dialog > Inspection Scope select the radio button "Whole project" > press the Analyze button.
In the bottom left button "Problems Alt+1" > Inspections on Project tab > Inspection Results > Proofreading.
KDE app handbook
Find a random KDE app https://apps.kde.org/ . E.g. KBreakOut https://apps.kde.org/kbreakout. In the right side of the web page > "Get help KBreakOut Handbook" > open the PDF version of the newest documentation for KBreakOut e.g. "Development (Frameworks 5) (PDF)". Select all of the text of the PDF e.g. if the PDF opens in Mozila Firefox right click on the content of the PDF > Select All > right click > Copy. Paste in a grammar checker and run a grammar check. E.g. create a new Google Doc, from the Google Docs main menu > Tools > Spelling and grammar > Spelling and grammar check. Or e.g. search on Google for "online grammar", open in new tabs dome of the online grammar checking web pages, in one of these pages paste the entire content of the PDF and run the grammar check. E.g. not all grammar checkers will detect missing commas.
C++
Fix g++ C++ compiler warning
In konsole:
rm -rf ~/kde/build/kcalc
CXX=g++ script -eq -c "kdesrc-build kcalc --no-src --no-include-dependencies --refresh-build --debug" ~/a.txt
kate ~/a.txt # This opens the file in the text editor kate.
Search for a string such as "warning: ".
Pick a build warning that seems simple enough to you. Invest time to fix one build warning.
Test that your fix is OK.
rm -rf ~/kde/build/kcalc
CXX=g++ script -eq -c "kdesrc-build kcalc --no-src --no-include-dependencies --refresh-build --debug" ~/b.txt
meld ~/a.txt ~/b.txt # This opens the previous build output and the new build output in a diff viewer.
# Make sure that the issue that you have fixed is indeed fixed.
cd ~/kde/build/kcalc
make test
# Make sure there are no new errors or warnings.
If everything is OK, fix a single g++ build warning,
do a single git commit and do a single MR.
Again, one MR should contain just one git commit.
And one git commit should contain only a single type of fixes,
with only a handful of source code lines changed (e.g. only one line changed).
There are tens of thousands of C++ compiler issues in the 400 KDE git repositories.
Fix clang++ C++ compiler warning
Compiling the same KDE C++ project using g++ might return different compiler warnings than when building using clang++.
Do exactly as for g++ above.
Replace "CXX=g++ " with "CC=clang CXX=clang++ ".
You can compare the build warnings generated by the two C++ compilers:
rm -rf ~/kde/build/kcalc
CXX=g++ script -eq -c "./kdesrc-build kconfig --no-src --no-include-dependencies --refresh-build --debug --num-cores=1" ~/a.txt
rm -rf ~/kde/build/kcalc
CC=clang CXX=clang++ script -eq -c "./kdesrc-build kconfig --no-src --no-include-dependencies --refresh-build --debug --num-cores=1" ~/b.txt
meld ~/a.txt ~/b.txt
Note: "--num-cores=1" forces the C++ compiler to use only one CPU thread. This will ensure that a.txt and b.txt are very similar.
Fix clangd C++ compiler warning
Fix Clang-Tidy static analysis issue
Build a KDE git repository using kdesrc-build. Open it in the IDE Qt Creator.
From Qt Creator main menu > Analyze > Clang-Tidy and Clazy... > press the Analyze button.
https://www.google.com/search?q=clang-tidy
Fix PVS-Studio static analysis issue
https://www.youtube.com/watch?v=NHwPhaIfrZ4
https://www.youtube.com/watch?v=XInpWKwkn4w
Fix Cppcheck static analysis issue
https://en.wikipedia.org/wiki/Cppcheck
https://www.youtube.com/watch?v=5OYvQ4Mi_1I
https://www.youtube.com/watch?v=1TSeSVDI3_s
Qt Creator has a plugin for cppcheck.
Build a KDE git repository using kdesrc-build. Open it in the IDE Qt Creator.
From Qt Creator main menu > Help > About Plugins > Code Analyzer > enable Cppcheck (experimental).
Restart Qt Creator. From Qt Creator main menu > Analyze > Cppcheck... > make sure that the content of the edit box "Custom arguments:" is "--inline-suppr" > press the Analyze button.
If the developer wants, the developer can disable the cppcheck warning for a source code line.
The man page for cppcheck says "--inline-suppr
Enable inline suppressions. Use them by placing comments in the form:
// cppcheck-suppress
before the line to suppress.".
E.g. in the application kalk:
// cppcheck-suppress duplicateExpression
KNumber::NegInfinity / KNumber::NegInfinity,
Disables the cppcheck warning "kalk/knumber/tests/knumbertest.cpp:678: Same expression on both sides of '/'.".
After you have fixed all of the cppcheck warnings that you can. After you have suppressed in source code using comments all the cppcheck warnings that the developer wants to be suppressed. Create a cppcheck command line that returns success (exit status zero). And do a Merge Request such that the Continuous Integration (CI) will make sure that cppcheck returns success. E.g. https://invent.kde.org/plasma-mobile/kalk/-/merge_requests/43
Fix CLion static analysis issue
Build a KDE git repository using kdesrc-build. Open it in the IDE JetBrains CLion. From CLion main menu > Code > Inspect Code… > Specify Inspection Scope dialog > Inspection Scope select the radio button "Whole project" > press the Analyze button.
Fix KDE clazy static analysis issue
Build a KDE git repository using kdesrc-build. Open it in the IDE Qt Creator.
From Qt Creator main menu > Analyze > Clang-Tidy and Clazy... > press the Analyze button.
https://www.youtube.com/watch?v=Z6MENrBRYJI
Fix static analysis issue using Allen Winter's krazy
Install krazy:
# Read https://github.com/Krazy-collection/krazy/blob/master/Install.txt
# Set up kdesrc-build using the kdesrc-build setup procedure.
kdesrc-build frameworks
mkdir -p ~/kde/misc && cd ~/kde/misc
git clone https://github.com/Krazy-collection/krazy.git
cd krazy
# Install the packages mentioned in chapter "Requirements" of https://github.com/Krazy-collection/krazy/blob/master/Install.txt . E.g.:
# sudo apt install libjson-perl libyaml-perl
# If you have installed Qt using kdesrc-build, prepend ~/kde/usr to some environment variables. E.g.:
# source ~/kde/build/kconfig/prefix.sh
./install.sh ~/kde/usr
source ~/kde/build/kconfig/prefix.sh
which krazy2
# Should say: ~/kde/usr/bin/krazy2
# Read the help:
krazy2 --help
# Test
krazy2 ~/kde/src/kconfig/src/core/*.{cpp,h}
Build a KDE git repository using kdesrc-build. Run krazy on the source code files of that KDE git repository:
kdesrc-build kconfig
krazy2 --brief --check-sets c++,qt5,kde5,foss --explain ~/kde/src/kconfig/src/core/*.{cpp,h}
# Says:
#Check for spelling errors [spelling]... 2 issues found
#        ~/kde/src/kconfig/src/core/kauthorized.h: line#45[of of] (1)
#        ~/kde/src/kconfig/src/core/kcoreconfigskeleton.h: line#805[for for] (1)
# The qt5 and kde5 check-sets also work for Qt6 and KDE Frameworks 6.
# Go over all of the source code files.
find ~/kde/src -type f -name "*.cpp" -print -exec bash -c  'echo "{}"; krazy2 --brief --check-sets c++,qt5,kde5,foss --explain "{}" ' \; |& tee ~/a.txt
Use the new Qt signal slot syntax
https://wiki.qt.io/New_Signal_Slot_Syntax
Fix deprecation issue
E.g. kDebug, kWarning and other symbols from ~/kde/usr/include/KF5/KDELibs4Support/kdebug.h are deprecated. Replace with e.g. the symbols in the family of qDebug from ~/kde/usr/include/QtCore/qlogging.h and ~/kde/usr/include/QtCore/qdebug.h .
E.g. run kdesrc-build without parameters, this will git clone and build all KDE git repositories. Search in ~/kde/src (i.e. in all the KDE git repositories) using e.g. VS Code for a deprecated symbol. You find an affected source code file in the git repository X. Open that git repository correctly in Qt Creator. Make sure that the deprecated symbol really is the one you thought it is. Replace the deprecated symbol. Build, test, git commit, MR.
QML
qmllint
# Get the source code of all of the KDE git repositories using kdesrc-build:
kdesrc-build --src-only
cd ~/kde/src
# As per https://www.kdab.com/kdab-contributions-qt-5-4-qmllint/
find . -type f -name "*.qml" -exec qmllint \{\} +
# Make sure that the list of warnings returned today is not longer than the list of warnings returned in a previous day.
Note: Once the qmllint installed from you Linux distribution's packages has the feature "You can now ignore individual warnings by adding "// qmllint disable" in the line causing it. You may also specify one or more warning type to ignore ("// qmllint disable warningtype1 warningtype2…") which is preferable. This can also be done for entire blocks of code by using "// qmllint disable" in an empty line and ending it with "// qmllint enable"" https://codereview.qt-project.org/c/qt/qtdeclarative/+/351372/6 . Then we will be able to add comments in the ".qml" files that have qmllint warnings. The end goal is that running qmllint on all of the ".qml" files from all of the KDE git repositories should not show any qmllint warnings.
qmlscene
# This is an advanced topic.
# Get the source code of all of the KDE git repositories using kdesrc-build:
kdesrc-build --src-only
cd ~/kde/src
find . -type f -name "*.qml" -print -exec bash -c  'echo "qmlscene {}"; qmlscene "{}" --quit' \; |& tee ~/a.txt
kate ~/a.txt &
# For now, ignore the errors of type:
# module "X" is not installed
# ReferenceError: Y is not defined
# Make sure that the list of warnings returned today is not longer than the list of warnings returned in a previous day.
CMake
cmakelint
Install https://github.com/cmake-lint/cmake-lint .
Set up kdesrc-build. Choose a KDE git repository, e.g. kconfig.
kdesrc-build kconfig
cd ~/kde/src/kconfig
for i in `find . -type f -name "CMakeLists.txt"`; do cmakelint "$i"; done &> ~/a.txt
kate ~/a.txt &
for i in `find . -type f -name "*.cmake"`; do cmakelint "$i"; done &> ~/b.txt
kate ~/b.txt &
Call the cmake_minimum_required() command at the beginning of the top-level CMakeLists.txt file
* https://cmake.org/cmake/help/latest/command/cmake_minimum_required.html :
"Note Call the cmake_minimum_required() command at the beginning of the
top-level CMakeLists.txt file even before calling the project() command.
It is important to establish version and policy settings before invoking
other commands whose behavior they may affect. See also policy CMP0000."
Find an affected KDE git repo where in the top level CMakeLists.txt before
cmake_minimum_required() exist non empty lines, no comment lines,
but lines that contain CMake source code.
Do a MR like https://invent.kde.org/graphics/kolourpaint/-/merge_requests/23
Example:
I install Microsoft Visual Studio Code and I make sure that "code" is in $PATH.
I build all KDE git repos:
kdesrc-build
without parameters.
In ~/.config/kdesrc-buildrc I have:
directory-layout invent
In konsole:
cd ~/kde/src
code . # This will start VS Code.
In VS Code main menu > View > Search Ctrl+Shift+F. In the Search field write:
cmake_minimum_required
in the field "files to include" write:
CMakeLists.txt
Press F4 one hundred times. It will go through all of the lines that contain
"cmake_minimum_required" in all of the files named "CMakeLists.txt".
You probably do not want to edit the CMakeLists.txt file from subdirectories named
like 3rdparty. These directories are a non KDE project, which has its upstream
git repo outside invent.kde.org. Fix the issues in third party libraries in their
upstream git repo.
KDE wiki
You should probably not edit old or archived wiki pages. E.g. https://community.kde.org/Schedules/Applications/17.04_Feature_Plan Do not edit wiki pages about an event from 10 years ago, e.g. https://community.kde.org/KDE_PIM/Meetings/Osnabrueck_4. Do not edit wiki pages about old technologies e.g. maemo, QtWebKit, KDE 4, Qt4, QBS etc.
Spell check and grammar check a random KDE wiki page
E.g.
Create a new Google Doc named “SpellCheck”.
In the web browser:
https://community.kde.org/index.php?title=Special:Random
takes you to:
https://community.kde.org/Get_Involved Ctrl+A Ctrl+C.
In the Google Doc: Ctrl+Shift+V. From the Google Doc main menu > Tools >
Spelling and grammar > Spelling and grammar check. It says that we should replace:
"KDE's Quality Assurance team tests pre-release software and proposed changed to make sure that everything works properly!"
with:
"KDE's Quality Assurance team tests pre-release software and proposes changes to make sure that everything works properly!"
In the web browser: edit the KDE wiki page to fix the spelling or grammar error.
In a random KDE wiki page, URL links should work correctly
E.g.
In the web browser:
https://community.kde.org/index.php?title=Special:Random
takes you to:
https://community.kde.org/Incubator/Projects/Rkward
you click on the URL:
"Its features can be extended by plugins, and it's all free software (Above information from
the current Rkward homepage." http://rkward.sourceforge.net/wiki/Main_Page
This takes you to:
https://rkward.kde.org/Main_Page
which is a web page that does not exist.
Edit the KDE wiki such that you replace the invalid URL
"http://rkward.sourceforge.net/wiki/Main_Page" with a valid URL.
Which in this case is the canonical homepage of the project rkward.
I.e. https://apps.kde.org/rkward/ .
This URL is probably better than the other possibility: https://rkward.kde.org/ .
In a random KDE wiki page, the wiki markup should be correct
Learn wikipedia/mediawiki wiki markup syntax. E.g. https://www.mediawiki.org/wiki/Help:Formatting , https://www.mediawiki.org/wiki/Cheatsheet
E.g.
In the web browser:
https://community.kde.org/index.php?title=Special:Random
takes you to:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging
You should be logged in. You edit the page (in the left hand side of the page Actions > Edit).
You see that "=" is used instead of "==". https://www.mediawiki.org/wiki/Help:Formatting says "Section formatting – only at the beginning of the line ... == Level 2 == ... Skip Level 1, it is page name level.". So you replace all "=" with "==". Make sure that the Table of Contents stays the same.
E.g. https://community.kde.org/index.php?title=Guidelines_and_HOWTOs%2FBug_triaging&type=revision&diff=95496&oldid=95495
KDE Craft
Besides kdesrc-build. KDE has another tool that can build KDE git repos: KDE Craft.
https://community.kde.org/Craft
E.g. choose a KDE git repo. E.g. kcalc.
Choose one of the operating systems supported by KDE Craft.
One of Microsoft Windows, Apple macOS, Linux or FreeBSD. E.g. Linux.
Create a Linux VM, install KDE Craft in this VM.
In konsole:
craft kcalc
Run the newly built/downloaded and installed kcalc.
Run executable using a run time analyzer
This is neither easy, nor suitable for beginners.
Build a KDE git repo that is not a framework or a library.
I.e. build a KDE app.
Make sure that you have kdesrc-build configured to build using
CMake build configuration "Debug".
I.e. in ~/.config/kdesrc-buildrc I have:
cmake-options -DCMAKE_BUILD_TYPE=Debug
E.g. build kcalc:
In konsole:
kdesrc-build kcalc
Then run kcalc under valgrind.
If valgrind says that there is an issue.
And if the issue is not in Mesa or in Qt.
But the issue is in one of the KDE git repos, e.g. a memory leak.
valgrind will say the line where the leak occurs.
Spell check all GUI strings
The KDE git repos use GNU gettext and .po files for translating the Graphical User Interface elements such as buttons and menus. Look through all of the KDE git repos, through all of the en.po files
and make sure that there are no typos.
E.g. build all KDE git repos using kdesrc-build. Run:
kdesrc-build
without parameters.
In konsole:
cd ~/kde/src
grep --include=*.po -r msgid . | grep /en.*/ | sort -u | sed 's/[^a-zA-Z ]/ /g' | tr 'A-Z ' 'a-z\n' | grep '[a-z]' | sort -u | comm -23 - <(sort /usr/share/dict/words) > ~/GuiWordsNotInDictionary.txt
kate ~/GuiWordsNotInDictionary.txt
E.g. we find the probably wrong word "disactived".
In konsole:
cd ~/kde/src
code .
In VS Code:
Search for the word "disactived". Files to exclude "*.po".
There is just one single result:
~/kde/src/clementine/src/widgets/osd.cpp
line 251 "tr("Wii Remote %1: disactived")".
You edit file ~/kde/src/clementine/src/widgets/osd.cpp and replace:
disactived
with:
deactivated
With just this one line change in the source code, you do one git commit and one MR.

Latest revision as of 02:57, 19 November 2024

I know how to program using C++. Can I do a KDE MR in less than 2 hours?

Below are some easy ways to do merge requests (MR) for the KDE git repositories. And easy ways to contribute to the KDE Community.

You can find instructions on how to open a KDE git repository in the IDE Qt Creator and JetBrains CLion. After you build that KDE git repository using kdesrc-build.

See similar lists and web pages for more ideas Marble, Calligra, 1, 2.

You should be able to build all 400 KDE git repositories using kdesrc-build

Have a long list of KDE modules which you build from time to time using kde-builder. Make sure that all the KDE git repositories continue to build correctly using kde-builder. If a KDE git repository was building successfully last week, but does not build successfully today, invest time to investigate why it stopped building in a timeboxed manner. E.g. invest 10 minutes. Then, if needed, ask in the KDE Matrix room "KDE New Contributors" ( https://community.kde.org/Matrix ) if this module is supposed to build.

Example: let's say that kcalc does not build. In konsole, I would run:

kdesrc-build kcalc --no-src --no-include-dependencies --refresh-build --debug |& tee ~/a.txt

In the web browser create a pastebin. E.g. https://pastebin.centos.org/ Paste the contents of the file ~/a.txt. Paste the URL of the new pastebin in the KDE matrix channel when requesting help.

Proofreading

Proofreading source code

Build a random KDE git repository using kdesrc-build. Open the git repository in CLion. In CLion analyze the entire project. Fix some of the grammar issues. See https://www.youtube.com/watch?v=3gEAVvwLENc

Proofreading a KDE app handbook

Find a random KDE app https://apps.kde.org/ . E.g. KBreakOut https://apps.kde.org/kbreakout. In the right side of the web page > "Get help" > "KBreakOut Handbook" > open the PDF version of the newest documentation for KBreakOut e.g. "Development (Frameworks 5) (PDF)". Select all of the text of the PDF e.g. if the PDF opens in Mozila Firefox right click on the content of the PDF > Select All > right click > Copy. Paste in a grammar checker and run a grammar check. E.g. create a new Google Doc, from the Google Docs main menu > Tools > Spelling and grammar > Spelling and grammar check. Or e.g. search on Google for "online grammar", open in new tabs some of the online grammar checking web pages, in one of these pages paste the entire content of the PDF and run the grammar check. E.g. not all grammar checkers will detect missing commas. There is also LibreOffice Write, Microsoft Word, Grammarly.

Just running kdesrc-build should not create "Unstaged Changes" in the local clone of a KDE git repo

Build a (random) KDE git repository using kdesrc-build. kdesrc-build should not display the text:
"* You had local changes to <ModuleName>, which have been re-applied."

In this case the issue is probably that the .gitignore file in the git repo is outdated.
E.g.
Install meld.
Let's say that kcalc is the git repo that reproduces this issue. You should have seen the text:
"* You had local changes to kcalc, which have been re-applied."

In konsole: I would run:
meld ~/kde/src/kconfig/.gitignore ~/kde/src/kcalc/.gitignore
In the diff viewer I can see that the last two lines in the file
~/kde/src/kconfig/.gitignore are new and do not exist yet in
~/kde/src/kcalc/.gitignore. I copy the new lines to ~/kde/src/kcalc/.gitignore
such that the two .gitignore files are identical.
Then I do a MR like https://invent.kde.org/graphics/kamera/-/merge_requests/5

C++

Fix g++ C++ compiler warning

In konsole:
CXX=g++ kdesrc-build kcalc --debug |& tee ~/buildoutput_gxx.txt

Open the file ~/buildoutput.txt in a text editor. E.g. kate.
Search for the string "warning: ". It should appear tens of thousands of times.
Pick a build warning that seems simple enough to you. Invest time to fix one build warning.
Test that your fix is OK.
E.g. for kcalc.
In konsole:
rm -rf ~/kde/build/kcalc
kdesrc-build kcalc --no-src --no-include-dependencies --debug
# Make sure there are no errors
cd ~/kde/build/kcalc
make test
# Make sure there are no errors

If everything is OK, fix a single g++ build warning,
do a single git commit and do a single MR.

Again, one MR should contain just one git commit.
And one git commit should contain only a single type of fixes (e.g. one type of fix),
with only handful of source code lines changed (e.g. only one line changed).

Fix clang++ C++ compiler warning

Do exactly as for g++ above.
Replace the first command line with:
CXX=clang++ kdesrc-build kcalc --debug |& tee ~/buildoutput_clangxx.txt

Fix clangd C++ compiler warning

Fix Clang-Tidy static analysis issue

Build a KDE git repository using kdesrc-build. Open it in the IDE Qt Creator.
From Qt Creator main menu > Analyze > Clang-Tidy and Clazy... > press the Analyze button.

https://www.google.com/search?q=clang-tidy

Fix PVS-Studio static analysis issue

https://www.youtube.com/watch?v=NHwPhaIfrZ4
https://www.youtube.com/watch?v=XInpWKwkn4w

PVS-Studio can be evaluated for free for 7 days.
In order to evaluate for 30 days, you can use a promo code.
E.g. From the description of https://www.youtube.com/watch?v=vYW6TOwFK2M "Download PVS-Studio https://pvs-studio.com/en/pvs-studio/download/?promo=Cherno 
Enter promo code #Cherno in the message field to get a 30 day free trial instead of 7."

Download a file named e.g. pvs-studio-7.27.75620.346-x86_64.tgz

rm -r pvs-studio
mkdir pvs-studio
tar -zxvf pvs-studio*.tgz -C pvs-studio --strip-components=1
cd pvs-studio
./install.sh ~/.local
echo $PATH # Should contain "/home/username/.local/bin".
which pvs-studio-analyzer # Should say "/home/username/.local/bin/pvs-studio-analyzer".

# License. You have received an email with evaluation license key.
# Use the values from that email.
pvs-studio-analyzer credentials name_from_license_key_email license_from_license_key_email

Download the file https://invent.kde.org/nmariusp/kdesrc-build-extra/-/blob/master/pvsstudiorun.sh
to e.g. ~/kde. Edit the file as needed:
cd ~/kde/src/kdesrc-build
./kdesrc-build kconfig
./kdesrc-build kconfig --no-src --no-include-dependencies --debug --refresh-build

From the console output copy to a new text file the part:

"Running cmake targeting Kate - Ninja...
        cd /home/username/kde/build/kconfig

run_logged_command(): Module kconfig, Command: cmake -B . -S /home/username/kde/src/kconfig -G Kate - Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DBUILD_WITH_QT6=ON -DCMAKE_CXX_FLAGS:STRING=-pipe -DCMAKE_INSTALL_PREFIX=/home/username/kde/usr -DCMAKE_PREFIX_PATH=/home/username/Qt/6.6.0/gcc_64
        Setting environment variable PATH to /home/username/kde/usr/bin:/home/username/Qt/6.6.0/gcc_64/bin:/home/username/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
        Setting environment variable QT_PLUGIN_PATH to /home/username/kde/usr/lib64/plugins:/home/username/kde/usr/lib/plugins
        Setting environment variable CMAKE_MODULE_PATH to /home/username/Qt/6.6.0/gcc_64/lib/cmake:/home/username/kde/usr/lib64/cmake:/home/username/kde/usr/lib/cmake
        Setting environment variable PKG_CONFIG_PATH to /home/username/kde/usr/lib/pkgconfig:/home/username/Qt/6.6.0/gcc_64/lib/pkgconfig
        Setting environment variable LD_LIBRARY_PATH to /home/username/kde/usr/lib:/home/username/Qt/6.6.0/gcc_64/lib
        Setting environment variable XDG_DATA_DIRS to /home/username/kde/usr/share
        Setting environment variable CMAKE_PREFIX_PATH to /home/username/Qt/6.6.0/gcc_64:/home/username/kde/usr
# kdesrc-build running: 'cmake' '-B' '.' '-S' '/home/username/kde/src/kconfig' '-G' 'Kate - Ninja' '-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON' '-DCMAKE_BUILD_TYPE=Debug' '-DBUILD_WITH_QT6=ON' '-DCMAKE_CXX_FLAGS:STRING=-pipe' '-DCMAKE_INSTALL_PREFIX=/home/username/kde/usr' '-DCMAKE_PREFIX_PATH=/home/username/Qt/6.6.0/gcc_64'
# from directory: /home/username/kde/build/kconfig"
We will name this the "original part".

Convert this part to the following format:
"export QT_PLUGIN_PATH=$KDESRC_DIRECTORY_PATH/usr/lib64/plugins:$KDESRC_DIRECTORY_PATH/usr/lib/plugins
export CMAKE_MODULE_PATH=/home/username/Qt/6.6.0/gcc_64/lib/cmake:$KDESRC_DIRECTORY_PATH/usr/lib64/cmake:$KDESRC_DIRECTORY_PATH/usr/lib/cmake
export PKG_CONFIG_PATH=$KDESRC_DIRECTORY_PATH/usr/lib/pkgconfig:/home/username/Qt/6.6.0/gcc_64/lib/pkgconfig
export CMAKE_PREFIX_PATH=/home/username/Qt/6.6.0/gcc_64:$KDESRC_DIRECTORY_PATH/usr
export LD_LIBRARY_PATH=$KDESRC_DIRECTORY_PATH/usr/lib:/home/username/Qt/6.6.0/gcc_64/lib
export XDG_DATA_DIRS=$KDESRC_DIRECTORY_PATH/usr/share
export PATH=$KDESRC_DIRECTORY_PATH/usr/bin:/home/username/Qt/6.6.0/gcc_64/bin:/home/username/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

cmake -B . -S $KDESRC_DIRECTORY_PATH/src/$MODULE_NAME -G Kate\ -\ Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DBUILD_WITH_QT6=ON -DCMAKE_CXX_FLAGS:STRING=-pipe -DCMAKE_INSTALL_PREFIX=$KDESRC_DIRECTORY_PATH/usr -DCMAKE_PREFIX_PATH=/home/username/Qt/6.6.0/gcc_64"
We will name this the "formatted part"

In the file ~/kde/pvsstudiorun.sh replace the part
"export CMAKE_MODULE_PATH=$KDESRC_DIRECTORY_PATH/usr/lib64/cmake:$KDESRC_DIRECTORY_PATH/usr/lib/cmake
export PKG_CONFIG_PATH=$KDESRC_DIRECTORY_PATH/usr/lib/pkgconfig
export CMAKE_PREFIX_PATH=$KDESRC_DIRECTORY_PATH/usr
export LD_LIBRARY_PATH=$KDESRC_DIRECTORY_PATH/usr/lib
export XDG_DATA_DIRS=$KDESRC_DIRECTORY_PATH/usr/share:/usr/share/plasma:/usr/local/share:/usr/share
export PATH=$KDESRC_DIRECTORY_PATH/usr/bin:$KDESRC_DIRECTORY_PATH/src/kdesrc-build:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

cmake -B . -S $KDESRC_DIRECTORY_PATH/src/$MODULE_NAME -G Unix\ Makefiles -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS:STRING=-pipe -DCMAKE_INSTALL_PREFIX=$KDESRC_DIRECTORY_PATH/usr"

with the "formatted part".

If you use ninja instead of "Unix Makefiles", replace
$PVSSTUDIO_BIN_PATH/pvs-studio-analyzer trace -- make -j `nproc`
with
$PVSSTUDIO_BIN_PATH/pvs-studio-analyzer trace -- ninja
.
chmod +x ~/kde/pvsstudiorun.sh
cd ~/kde
./pvsstudiorun.sh ~/kde/src/kconfig
# kate starts with the file ~/kde/build-pvs/kconfig/report.tasks open.
# Fix an issue, run the line "./pvsstudiorun.sh ~/kde/src/kconfig"
# again to confirm that the issue has been fixed.

Open in the IDE Qt Creator ~/kde/src/kconfig. See https://develop.kde.org/docs/getting-started/building/ide/qt-creator/
From the Qt Creator main menu > File > Open File or Project > ~/kde/build-pvs/kconfig/report.tasks
The file ~/kde/build-pvs/kconfig/report.tasks will be shown in the "Issues Alt+1" tool window.

Fix Cppcheck static analysis issue

https://en.wikipedia.org/wiki/Cppcheck
https://www.youtube.com/watch?v=5OYvQ4Mi_1I
https://www.youtube.com/watch?v=1TSeSVDI3_s

Qt Creator has a plugin for cppcheck.
Build a KDE git repository using kdesrc-build. Open it in the IDE Qt Creator.
From Qt Creator main menu > Help > About Plugins > Code Analyzer > enable Cppcheck (experimental).
Restart Qt Creator. From Qt Creator main menu > Analyze > Cppcheck... > make sure that the content of the edit box "Custom arguments:" is "--inline-suppr" > press the Analyze button.

If the developer wants, the developer can disable the cppcheck warning for a source code line. 
The man page for cppcheck says "--inline-suppr
Enable inline suppressions. Use them by placing comments in the form:
// cppcheck-suppress <CppcheckErrorID>
before the line to suppress.".

E.g. in the application kalk:
// cppcheck-suppress duplicateExpression
KNumber::NegInfinity / KNumber::NegInfinity,
Disables the cppcheck warning "kalk/knumber/tests/knumbertest.cpp:678: Same expression on both sides of '/'.".

After you have fixed all of the cppcheck warnings that you can. After you have suppressed in source code using comments all the cppcheck warnings that the developer wants to be suppressed. Create a cppcheck command line that returns success (exit status zero). And do a Merge Request such that the Continuous Integration (CI) will make sure that cppcheck returns success. E.g. https://invent.kde.org/plasma-mobile/kalk/-/merge_requests/43

Fix KDE clazy static analysis issue

Build a KDE git repository using kdesrc-build. Open it in the IDE Qt Creator.
From Qt Creator main menu > Analyze > Clang-Tidy and Clazy... > press the Analyze button.

https://www.youtube.com/watch?v=Z6MENrBRYJI

Fix static analysis issue using Allen Winter's krazy

Install krazy:

# Read https://github.com/Krazy-collection/krazy/blob/master/Install.txt
# Set up kdesrc-build using the kdesrc-build setup procedure.
kdesrc-build frameworks

mkdir -p ~/kde/misc && cd ~/kde/misc
git clone https://github.com/Krazy-collection/krazy.git
cd krazy
# Install the packages mentioned in chapter "Requirements" of https://github.com/Krazy-collection/krazy/blob/master/Install.txt . E.g.:
# sudo apt install libjson-perl libyaml-perl

# If you have installed Qt using kdesrc-build, prepend ~/kde/usr to some environment variables. E.g.:
# source ~/kde/build/kconfig/prefix.sh
./install.sh ~/.local
# Make sure "~/.local/bin" is in your $PATH environment variable.
echo $PATH
# Should contain the directory "~/.local/bin".
which krazy2
# Should say: "~/.local/bin/krazy2"
# Read the help:
krazy2 --help
# Test
krazy2 ~/kde/src/kconfig/src/core/*.{cpp,h}

Build a KDE git repository using kdesrc-build. Run krazy on the source code files of that KDE git repository:

kdesrc-build kconfig
krazy2 --brief --check-sets c++,qt5,kde5,foss --explain ~/kde/src/kconfig/src/core/*.{cpp,h}
# Says:
#Check for spelling errors [spelling]... 2 issues found
#        ~/kde/src/kconfig/src/core/kauthorized.h: line#45[of of] (1)
#        ~/kde/src/kconfig/src/core/kcoreconfigskeleton.h: line#805[for for] (1)

# The qt5 and kde5 check-sets also work for Qt6 and KDE Frameworks 6.

# Go over all of the source code files.
cd ~/kde/src/kconfig
find . -type f -name "*.cpp" -print -exec bash -c  'echo "{}"; krazy2 --brief --check-sets c++,qt5,kde5,foss --explain "{}" ' \; |& tee ~/a.txt

Use the new Qt signal slot syntax

https://wiki.qt.io/New_Signal_Slot_Syntax

Fix deprecation issue

E.g. kDebug, kWarning and other symbols from ~/kde/usr/include/KF5/KDELibs4Support/kdebug.h are deprecated. Replace with e.g. the symbols in the family of qDebug from ~/kde/usr/include/QtCore/qlogging.h and ~/kde/usr/include/QtCore/qdebug.h .

E.g. run kdesrc-build without parameters, this will git clone and build all KDE git repositories. Search in ~/kde/src (i.e. in all the KDE git repositories) using e.g. VS Code for a deprecated symbol. You find an affected source code file in the git repository X. Open that git repository correctly in Qt Creator. Make sure that the deprecated symbol really is the one you thought it is. Replace the deprecated symbol. Build, test, git commit, MR.

Use C++ defines

Some of the defines that you can use in order to generate build/compiler errors or warnings: QT_USE_QSTRINGBUILDER, QT_STRICT_ITERATORS, QT_NO_URL_CAST_FROM_STRING, QT_NO_CAST_FROM_BYTEARRAY, QT_NO_SIGNALS_SLOTS_KEYWORDS, QT_USE_FAST_OPERATOR_PLUS, QT_NO_URL_CAST_FROM_STRING, QT_NO_CAST_TO_ASCII, QT_NO_CAST_FROM_ASCII, QT_DISABLE_DEPRECATED_BEFORE=0x050900.

E.g. have in the kdesrc-buildrc file in the global section:

cmake-options -DCMAKE_BUILD_TYPE=Debug -DQT_NO_CAST_FROM_ASCII=ON -DQT_NO_CAST_TO_ASCII=ON

Some KDE git repositories undefine some of the above defines. E.g. https://invent.kde.org/system/dolphin/-/blob/master/src/CMakeLists.txt?ref_type=heads#L8 says:

remove_definitions(
    -DQT_NO_CAST_FROM_BYTEARRAY
    -DQT_NO_CAST_FROM_ASCII
    -DQT_NO_CAST_TO_ASCII
)

QML

qmllint

# Get the source code of all of the KDE git repositories using kdesrc-build:
kdesrc-build --src-only
cd ~/kde/src
# As per https://www.kdab.com/kdab-contributions-qt-5-4-qmllint/
find . -type f -name "*.qml" -exec qmllint \{\} +
# Make sure that the list of warnings returned today is not longer than the list of warnings returned in a previous day.

Note: Once the qmllint installed from you Linux distribution's packages has the feature "You can now ignore individual warnings by adding "// qmllint disable" in the line causing it. You may also specify one or more warning type to ignore ("// qmllint disable warningtype1 warningtype2...") which is preferable. This can also be done for entire blocks of code by using "// qmllint disable" in an empty line and ending it with "// qmllint enable"" https://codereview.qt-project.org/c/qt/qtdeclarative/+/351372/6 . Then we will be able to add comments in the "*.qml" files that have qmllint warnings. The end goal is that running qmllint on all of the "*.qml" files from all of the KDE git repositories should not show any qmllint warnings.

qmlscene

# This is an advanced topic.
# Get the source code of all of the KDE git repositories using kdesrc-build:
kdesrc-build --src-only
cd ~/kde/src
find . -type f -name "*.qml" -print -exec bash -c  'echo "qmlscene {}"; qmlscene "{}" --quit' \; |& tee ~/a.txt
kate ~/a.txt &
# For now, ignore the errors of type:
# module "X" is not installed
# ReferenceError: Y is not defined
# Make sure that the list of warnings returned today is not longer than the list of warnings returned in a previous day.

CMake

cmakelint

Video version https://www.youtube.com/watch?v=hRqKBgfOfks

Install https://github.com/cmake-lint/cmake-lint .

Set up kdesrc-build. Choose a KDE git repository, e.g. kconfig.

kdesrc-build kconfig
cd ~/kde/src/kconfig
for i in `find . -type f -name "CMakeLists.txt"`; do cmakelint "$i"; done &> ~/a.txt
kate ~/a.txt &

for i in `find . -type f -name "*.cmake"`; do cmakelint "$i"; done &> ~/b.txt
kate ~/b.txt &

E.g.

# Build.
kdesrc-build kconfig

# Install cmakelint.
mkdir -p ~/work
cd ~/work
python3 -m venv ./venv
source ~/work/venv/bin/activate
pip install cmakelint
cmakelint --version

# Use cmakelint.
source ~/work/venv/bin/activate
cd ~/kde/src/kconfig
code .
# From the VS Code main menu > View > Terminal Ctrl+` . Run:
for i in `find . -type f \( -name "CMakeLists.txt" -o -name "*.cmake" \)`; do cmakelint --linelength=2000 "$i"; done
# In the terminal, if issues have been found, Ctrl+click on the file name of an issue.

Call the cmake_minimum_required() command at the beginning of the top-level CMakeLists.txt file

* https://cmake.org/cmake/help/latest/command/cmake_minimum_required.html :
"Note Call the cmake_minimum_required() command at the beginning of the
top-level CMakeLists.txt file even before calling the project() command.
It is important to establish version and policy settings before invoking
other commands whose behavior they may affect. See also policy CMP0000."

Find an affected KDE git repo where in the top level CMakeLists.txt before
cmake_minimum_required() exist non empty lines, no comment lines,
but lines that contain CMake source code.
Do a MR like https://invent.kde.org/graphics/kolourpaint/-/merge_requests/23

Example:
I install Microsoft Visual Studio Code and I make sure that "code" is in $PATH.
I build all KDE git repos:
kdesrc-build
without parameters.
In ~/.config/kdesrc-buildrc I have:
directory-layout invent
In konsole:
cd ~/kde/src
code . # This will start VS Code.
In VS Code main menu > View > Search Ctrl+Shift+F. In the Search field write:
cmake_minimum_required
in the field "files to include" write:
CMakeLists.txt
Press F4 one hundred times. It will go through all of the lines that contain
"cmake_minimum_required" in all of the files named "CMakeLists.txt".
You probably do not want to edit the CMakeLists.txt file from subdirectories named
like 3rdparty. These directories are a non KDE project, which has its upstream
git repo outside invent.kde.org. Fix the issues in third party libraries in their
upstream git repo.

KDE wiki

You should probably not edit old or archived wiki pages. E.g. https://community.kde.org/Schedules/Applications/17.04_Feature_Plan Do not edit wiki pages about an event from 10 years ago, e.g. https://community.kde.org/KDE_PIM/Meetings/Osnabrueck_4. Do not edit wiki pages about old technologies e.g. maemo, QtWebKit, KDE 4, Qt4, QBS etc.

Spell check and grammar check a random KDE wiki page

E.g.
Create a new Google Doc named “SpellCheck”.
In the web browser:
https://community.kde.org/index.php?title=Special:Random
takes you to:
https://community.kde.org/Get_Involved Ctrl+A Ctrl+C.

In the Google Doc: Ctrl+Shift+V. From the Google Doc main menu > Tools >
Spelling and grammar > Spelling and grammar check. It says that we should replace:
"KDE's Quality Assurance team tests pre-release software and proposed changed to make sure that everything works properly!"
with:
"KDE's Quality Assurance team tests pre-release software and proposes changes to make sure that everything works properly!"
In the web browser: edit the KDE wiki page to fix the spelling or grammar error.

In a random KDE wiki page, URL links should work correctly

E.g.
In the web browser:
https://community.kde.org/index.php?title=Special:Random
takes you to:
https://community.kde.org/Incubator/Projects/Rkward
you click on the URL:
"Its features can be extended by plugins, and it's all free software (Above information from
the current Rkward homepage." http://rkward.sourceforge.net/wiki/Main_Page
This takes you to:
https://rkward.kde.org/Main_Page
which is a web page that does not exist.

Edit the KDE wiki such that you replace the invalid URL
"http://rkward.sourceforge.net/wiki/Main_Page" with a valid URL.
Which in this case is the canonical homepage of the project rkward.
I.e. https://apps.kde.org/rkward/ .
This URL is probably better than the other possibility: https://rkward.kde.org/ .

In a random KDE wiki page, the wiki markup should be correct

Learn wikipedia/mediawiki wiki markup syntax. E.g. https://www.mediawiki.org/wiki/Help:Formatting , https://www.mediawiki.org/wiki/Cheatsheet

E.g.
In the web browser:
https://community.kde.org/index.php?title=Special:Random
takes you to:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging
You should be logged in. You edit the page (in the left hand side of the page Actions > Edit).

You see that "=" is used instead of "==". https://www.mediawiki.org/wiki/Help:Formatting says "Section formatting – only at the beginning of the line ... == Level 2 == ... Skip Level 1, it is page name level.". So you replace all "=" with "==". Make sure that the Table of Contents stays the same. 
E.g. https://community.kde.org/index.php?title=Guidelines_and_HOWTOs%2FBug_triaging&type=revision&diff=95496&oldid=95495

KDE Craft

Besides kdesrc-build. KDE has another tool that can build KDE git repos: KDE Craft.
https://community.kde.org/Craft

E.g. choose a KDE git repo. E.g. kcalc.
Choose one of the operating systems supported by KDE Craft.
One of Microsoft Windows, Apple macOS, Linux or FreeBSD. E.g. Linux.
Create a Linux VM, install KDE Craft in this VM.
In konsole:
craft kcalc
Run the newly built/downloaded and installed kcalc.

Run executable using a run time analyzer

This is neither easy, nor suitable for beginners.

Build a KDE git repo that is not a framework or a library.
I.e. build a KDE app.
Make sure that you have kdesrc-build configured to build using
CMake build configuration "Debug".
I.e. in ~/.config/kdesrc-buildrc I have:
cmake-options -DCMAKE_BUILD_TYPE=Debug

E.g. build kcalc:
In konsole:
kdesrc-build kcalc
Then run kcalc under valgrind.

If valgrind says that there is an issue.
And if the issue is not in Mesa or in Qt.
But the issue is in one of the KDE git repos, e.g. a memory leak.
valgrind will say the line where the leak occurs.

Remove old technologies

E.g. khtml ("-khtml-border-radius: 7px;"), the Java web browser plugin, the Flash web browser plugin, Netscape plugin API (npapi) web browser plugins, instant messaging protocols that do not exist anymore e.g. AIM, ICQ, Yahoo etc. Mentions of old versions of Opera web browser which did not use the HTML rendering engine from Google Chrome. win 32 movie codecs.

Non standard technologies since the standard technologies are supported by the major software products for ten years e.g. "-moz-border-radius: 2px; -webkit-border-radius: 2px;", maybe even "#pragma once".

State of the art

  • AppStream. All KDE git repositories for GUI apps should contain at least one appstream org.kde.<appname>.metainfo.xml file.
  • Make sure the home page of the KDE app https://apps.kde.org/<appname> is up to date. E.g. should contain a screenshot of the app, not a screenshot of the manual, should not contain a link to https://userbase.kde.org, should contain a link to the app's Handbook. Make sure that the appstream "Install on Linux" URL (e.g. "appstream://org.kde.kmag.desktop") works correctly.
  • In an automated fashion, make sure that all of the appdata files have valid and recent "Releases" information.
  • Do not use URLs that do not work.
  • In CMakeLists.txt, use "find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS CoreAddons Config" instead of "find_package(KF6Config) set_package_properties(KF6Config PROPERTIES TYPE REQUIRED)".
  • Validate all appstream files using a command line like "appstreamcli validate org.kde.kmag.appdata.xml".
cd ~/kde/src
for i in `find . -type f -name "*.appdata.xml"`; do appstreamcli validate --explain "$i"; done &> ~/a.txt
for i in `find . -type f -name "*.metainfo.xml"`; do appstreamcli validate --explain "$i"; done &>> ~/a.txt
kate ~/a.txt &

This is the list of appstream issues as of 2023.12.28 https://drive.google.com/file/d/1Dl9ZYVbihARYa8z_2xzTzd-j0MW-6sTA .

Note: do not look at the translated strings. If you want to improve the translated strings, please ask for help from the KDE translators team.

How to install kde-builder

Qt 6 installed using Qt online installer

The homepage of the Qt Framework is https://www.qt.io . Go to this web page, create an online account. https://www.qt.io/download-open-source > "Download the Qt Online Installer" > Linux > "Qt Online Installer for Linux (64-bit)" > download a file named e.g. qt-unified-linux-x64-4.6.1-online.run into the directory e.g. "~/Downloads".

ls -la ~/Downloads # The downloaded file needs to hace the "executable" chmod bit set.
chmod +x ~/Downloads/qt-unified-linux-x64-4.6.1-online.run
~/Downloads/qt-unified-linux-x64-4.6.1-online.run

Login using your Qt online account. Next > check the checkbox "I have read and agree to the terms and conditions of using OpenSource Qt", check the checkbox "I'm an individual and do not use Qt for any company" > Next > Next > enable "Help us improve" > Next > Custom installation, notice that the install directory is "~/Qt" > Next. Install the latest version of Qt6 and the latest version of the Qt Creator integrated development environment (IDE). There are some Qt6 components that are not used by KDE and can be left out when installing Qt6 e.g. WebAssembly, Android, Sources, Qt Quick 3D, Qt 3D, "Quick: 3D Physics", "Qt debug Information Files".

In the KDE Plasma app launcher you now have the application "Qt Maintenance Tool".

Set up kde-builder from scratch as usual.

Edit the file kdesrc-buildrc to look like:

global
...
    qt-install-dir  ~/Qt/6.6.0/gcc_64 # Where to install Qt6 if kdesrc-build supplies it
    libname lib
...
end global

Make gpgme build:

sudo su
mkdir -p /home/qt/work
chown -R username:username /home/qt/work
ln -s /home/username/Qt/6.6.0/gcc_64 /home/qt/work/install
ls -la /home/qt/work

More

How to write the entire verbose STDOUT and STDERR of kdesrc-build to a file

script -eq -c "kdesrc-build kconfig --no-src --no-include-dependencies --refresh-build --debug" ~/a.txt ;  sed -i $'s/\033\[[0-9]\+m//g' ~/a.txt

The sed part removes the terminal ANSI color escape codes.

script -eq -c "command" ~/a.txt is better than command |& tee ~/a.txt because kdesrc-build behaves differently if it is run in a user interactive terminal session (isatty).

If using tee, part of the output of kdesrc-build will not be written to file. E.g. the output of the cmake step, the final part of the make -j step, the final part of the make install step.

Ignore everything below

Ideas for Merge Requests (MRs) that can be done in under half an hour

If you are a C++ developer and want to invest 30 minutes, you can create a merge request (MR) towards a KDE git repository.

Go to https://community.kde.org/Get_Involved/development/Easy .

The spirit of the page https://community.kde.org/Get_Involved/development/Easy is: "I am a C++ developer already. What can I do such that in a short amount of work hours per week I can do some Merge Requests that will actually be merged". The opposite is "I have worked on a single issue from bugs.kde.org. It took me 40 work hours, I only work 2 hours per week, therefore I only did one Merge Request in 4 months. And because the MR was too long, it was never merged".

Do many small easy Merge Requests (MRs) vs bugs.kde.org.

If I were to start programming for KDE, I would ignore the KDE bugs. And instead do for a number of weeks a large number of simple Merge Requests (MRs). Working on a simple KDE bug takes 5 hours easily if you know all of the prerequisites: e.g. C++, how to build a KDE git repo using kdesrc-build, how to use Qt Creator as an IDE with CMake integration and debugger for a KDE git repo, if you have read this KDE wiki page and all of its children pages https://community.kde.org/Get_Involved/development. https://www.youtube.com/watch?v=yil21FDAuMY

I vote that people that start programming for KDE should do easy MRs for at least a month (one MR per worked hour). This will be ~ 2 work hours per week, ~2 MRs per week, ~8 MRs per month. Only after this you should start working on issues from bugs.kde.org.

TODO: delete everything below. The canonical place for the rest of this page is https://community.kde.org/Get_Involved/development/Easy .

Below are some easy ways to do merge requests (MR) for the KDE git repositories. And easy ways to contribute to the KDE Community.

You can find here instructions on how to open a KDE git repository in the IDE Qt Creator. After you build that KDE git repository using kdesrc-build. You should be able to build all 400 KDE git repositories using kdesrc-build

From time to time, make sure that all the KDE git repositories (continue to) build correctly using kdesrc-build. Run:

kdesrc-build

without parameters. That will build all 400 KDE git repositories. If a KDE git repository was building successfully last week, but does not build successfully today, invest time to investigate why it stopped building in a timeboxed manner. E.g. invest 10 minutes. Then, if needed, ask in the KDE Matrix room "KDE New Contributors" ( https://go.kde.org/matrix/#/#kde-welcome:kde.org https://community.kde.org/Matrix ) if this module is supposed to build.

Example: let's say that kcalc does not build. In konsole, I would run:

kdesrc-build kcalc --no-src --no-include-dependencies --refresh-build --debug |& tee ~/a.txt

In the web browser create a pastebin. E.g. https://pastebin.centos.org/ Paste the contents of the file ~/a.txt. Paste the URL of the new pastebin in the KDE matrix channel when requesting help. Just running kdesrc-build should not create "Unstaged Changes" in the local clone of a KDE git repo

Build all the KDE git repositories using kdesrc-build. Run:

kdesrc-build

You should not see displayed the text:

  • You had local changes to , which have been re-applied.

In this case the issue is probably that the .gitignore file in the git repo is outdated. E.g. Install meld. Let's say that kcalc is the git repo that reproduces this issue. You should have seen the text: "* You had local changes to kcalc, which have been re-applied." In konsole: I would run:

meld ~/kde/src/kconfig/.gitignore ~/kde/src/kcalc/.gitignore

In the diff viewer I can see that the last two lines in the file ~/kde/src/frameworks/kconfig/.gitignore are new and do not exist yet in ~/kde/src/utilities/kcalc/.gitignore. I copy the new lines to ~/kde/src/utilities/kcalc/.gitignore such that the two .gitignore files are identical. Then I do a MR like https://invent.kde.org/graphics/kamera/-/merge_requests/5 Fix proofreading, grammar, spellchecking issues in the source code

Build a KDE git repository using kdesrc-build. Open it in the IDE JetBrains CLion. From CLion main menu > Code > Inspect Code… > Specify Inspection Scope dialog > Inspection Scope select the radio button "Whole project" > press the Analyze button. In the bottom left button "Problems Alt+1" > Inspections on Project tab > Inspection Results > Proofreading. KDE app handbook

Find a random KDE app https://apps.kde.org/ . E.g. KBreakOut https://apps.kde.org/kbreakout. In the right side of the web page > "Get help KBreakOut Handbook" > open the PDF version of the newest documentation for KBreakOut e.g. "Development (Frameworks 5) (PDF)". Select all of the text of the PDF e.g. if the PDF opens in Mozila Firefox right click on the content of the PDF > Select All > right click > Copy. Paste in a grammar checker and run a grammar check. E.g. create a new Google Doc, from the Google Docs main menu > Tools > Spelling and grammar > Spelling and grammar check. Or e.g. search on Google for "online grammar", open in new tabs dome of the online grammar checking web pages, in one of these pages paste the entire content of the PDF and run the grammar check. E.g. not all grammar checkers will detect missing commas. C++ Fix g++ C++ compiler warning

In konsole:

rm -rf ~/kde/build/kcalc CXX=g++ script -eq -c "kdesrc-build kcalc --no-src --no-include-dependencies --refresh-build --debug" ~/a.txt kate ~/a.txt # This opens the file in the text editor kate.

Search for a string such as "warning: ". Pick a build warning that seems simple enough to you. Invest time to fix one build warning. Test that your fix is OK.

rm -rf ~/kde/build/kcalc CXX=g++ script -eq -c "kdesrc-build kcalc --no-src --no-include-dependencies --refresh-build --debug" ~/b.txt meld ~/a.txt ~/b.txt # This opens the previous build output and the new build output in a diff viewer.

  1. Make sure that the issue that you have fixed is indeed fixed.

cd ~/kde/build/kcalc make test

  1. Make sure there are no new errors or warnings.

If everything is OK, fix a single g++ build warning, do a single git commit and do a single MR.

Again, one MR should contain just one git commit. And one git commit should contain only a single type of fixes, with only a handful of source code lines changed (e.g. only one line changed).

There are tens of thousands of C++ compiler issues in the 400 KDE git repositories. Fix clang++ C++ compiler warning

Compiling the same KDE C++ project using g++ might return different compiler warnings than when building using clang++. Do exactly as for g++ above. Replace "CXX=g++ " with "CC=clang CXX=clang++ ".

You can compare the build warnings generated by the two C++ compilers:

rm -rf ~/kde/build/kcalc CXX=g++ script -eq -c "./kdesrc-build kconfig --no-src --no-include-dependencies --refresh-build --debug --num-cores=1" ~/a.txt

rm -rf ~/kde/build/kcalc CC=clang CXX=clang++ script -eq -c "./kdesrc-build kconfig --no-src --no-include-dependencies --refresh-build --debug --num-cores=1" ~/b.txt

meld ~/a.txt ~/b.txt

Note: "--num-cores=1" forces the C++ compiler to use only one CPU thread. This will ensure that a.txt and b.txt are very similar. Fix clangd C++ compiler warning Fix Clang-Tidy static analysis issue

Build a KDE git repository using kdesrc-build. Open it in the IDE Qt Creator. From Qt Creator main menu > Analyze > Clang-Tidy and Clazy... > press the Analyze button.

https://www.google.com/search?q=clang-tidy

Fix PVS-Studio static analysis issue

https://www.youtube.com/watch?v=NHwPhaIfrZ4 https://www.youtube.com/watch?v=XInpWKwkn4w

Fix Cppcheck static analysis issue

https://en.wikipedia.org/wiki/Cppcheck https://www.youtube.com/watch?v=5OYvQ4Mi_1I https://www.youtube.com/watch?v=1TSeSVDI3_s

Qt Creator has a plugin for cppcheck. Build a KDE git repository using kdesrc-build. Open it in the IDE Qt Creator. From Qt Creator main menu > Help > About Plugins > Code Analyzer > enable Cppcheck (experimental). Restart Qt Creator. From Qt Creator main menu > Analyze > Cppcheck... > make sure that the content of the edit box "Custom arguments:" is "--inline-suppr" > press the Analyze button.

If the developer wants, the developer can disable the cppcheck warning for a source code line. The man page for cppcheck says "--inline-suppr Enable inline suppressions. Use them by placing comments in the form: // cppcheck-suppress before the line to suppress.".

E.g. in the application kalk: // cppcheck-suppress duplicateExpression KNumber::NegInfinity / KNumber::NegInfinity, Disables the cppcheck warning "kalk/knumber/tests/knumbertest.cpp:678: Same expression on both sides of '/'.".

After you have fixed all of the cppcheck warnings that you can. After you have suppressed in source code using comments all the cppcheck warnings that the developer wants to be suppressed. Create a cppcheck command line that returns success (exit status zero). And do a Merge Request such that the Continuous Integration (CI) will make sure that cppcheck returns success. E.g. https://invent.kde.org/plasma-mobile/kalk/-/merge_requests/43

Fix CLion static analysis issue

Build a KDE git repository using kdesrc-build. Open it in the IDE JetBrains CLion. From CLion main menu > Code > Inspect Code… > Specify Inspection Scope dialog > Inspection Scope select the radio button "Whole project" > press the Analyze button. Fix KDE clazy static analysis issue

Build a KDE git repository using kdesrc-build. Open it in the IDE Qt Creator. From Qt Creator main menu > Analyze > Clang-Tidy and Clazy... > press the Analyze button.

https://www.youtube.com/watch?v=Z6MENrBRYJI

Fix static analysis issue using Allen Winter's krazy

Install krazy:

  1. Read https://github.com/Krazy-collection/krazy/blob/master/Install.txt
  2. Set up kdesrc-build using the kdesrc-build setup procedure.

kdesrc-build frameworks

mkdir -p ~/kde/misc && cd ~/kde/misc git clone https://github.com/Krazy-collection/krazy.git cd krazy

  1. Install the packages mentioned in chapter "Requirements" of https://github.com/Krazy-collection/krazy/blob/master/Install.txt . E.g.:
  2. sudo apt install libjson-perl libyaml-perl
  1. If you have installed Qt using kdesrc-build, prepend ~/kde/usr to some environment variables. E.g.:
  2. source ~/kde/build/kconfig/prefix.sh

./install.sh ~/kde/usr source ~/kde/build/kconfig/prefix.sh which krazy2

  1. Should say: ~/kde/usr/bin/krazy2
  2. Read the help:

krazy2 --help

  1. Test

krazy2 ~/kde/src/kconfig/src/core/*.{cpp,h}

Build a KDE git repository using kdesrc-build. Run krazy on the source code files of that KDE git repository:

kdesrc-build kconfig krazy2 --brief --check-sets c++,qt5,kde5,foss --explain ~/kde/src/kconfig/src/core/*.{cpp,h}

  1. Says:
  2. Check for spelling errors [spelling]... 2 issues found
  3. ~/kde/src/kconfig/src/core/kauthorized.h: line#45[of of] (1)
  4. ~/kde/src/kconfig/src/core/kcoreconfigskeleton.h: line#805[for for] (1)
  1. The qt5 and kde5 check-sets also work for Qt6 and KDE Frameworks 6.
  1. Go over all of the source code files.

find ~/kde/src -type f -name "*.cpp" -print -exec bash -c 'echo "{}"; krazy2 --brief --check-sets c++,qt5,kde5,foss --explain "{}" ' \; |& tee ~/a.txt

Use the new Qt signal slot syntax

https://wiki.qt.io/New_Signal_Slot_Syntax Fix deprecation issue

E.g. kDebug, kWarning and other symbols from ~/kde/usr/include/KF5/KDELibs4Support/kdebug.h are deprecated. Replace with e.g. the symbols in the family of qDebug from ~/kde/usr/include/QtCore/qlogging.h and ~/kde/usr/include/QtCore/qdebug.h .

E.g. run kdesrc-build without parameters, this will git clone and build all KDE git repositories. Search in ~/kde/src (i.e. in all the KDE git repositories) using e.g. VS Code for a deprecated symbol. You find an affected source code file in the git repository X. Open that git repository correctly in Qt Creator. Make sure that the deprecated symbol really is the one you thought it is. Replace the deprecated symbol. Build, test, git commit, MR. QML qmllint

  1. Get the source code of all of the KDE git repositories using kdesrc-build:

kdesrc-build --src-only cd ~/kde/src

  1. As per https://www.kdab.com/kdab-contributions-qt-5-4-qmllint/

find . -type f -name "*.qml" -exec qmllint \{\} +

  1. Make sure that the list of warnings returned today is not longer than the list of warnings returned in a previous day.

Note: Once the qmllint installed from you Linux distribution's packages has the feature "You can now ignore individual warnings by adding "// qmllint disable" in the line causing it. You may also specify one or more warning type to ignore ("// qmllint disable warningtype1 warningtype2…") which is preferable. This can also be done for entire blocks of code by using "// qmllint disable" in an empty line and ending it with "// qmllint enable"" https://codereview.qt-project.org/c/qt/qtdeclarative/+/351372/6 . Then we will be able to add comments in the ".qml" files that have qmllint warnings. The end goal is that running qmllint on all of the ".qml" files from all of the KDE git repositories should not show any qmllint warnings. qmlscene

  1. This is an advanced topic.
  2. Get the source code of all of the KDE git repositories using kdesrc-build:

kdesrc-build --src-only cd ~/kde/src find . -type f -name "*.qml" -print -exec bash -c 'echo "qmlscene {}"; qmlscene "{}" --quit' \; |& tee ~/a.txt kate ~/a.txt &

  1. For now, ignore the errors of type:
  2. module "X" is not installed
  3. ReferenceError: Y is not defined
  4. Make sure that the list of warnings returned today is not longer than the list of warnings returned in a previous day.

CMake cmakelint

Install https://github.com/cmake-lint/cmake-lint .

Set up kdesrc-build. Choose a KDE git repository, e.g. kconfig.

kdesrc-build kconfig cd ~/kde/src/kconfig for i in `find . -type f -name "CMakeLists.txt"`; do cmakelint "$i"; done &> ~/a.txt kate ~/a.txt &

for i in `find . -type f -name "*.cmake"`; do cmakelint "$i"; done &> ~/b.txt kate ~/b.txt &

Call the cmake_minimum_required() command at the beginning of the top-level CMakeLists.txt file

"Note Call the cmake_minimum_required() command at the beginning of the top-level CMakeLists.txt file even before calling the project() command. It is important to establish version and policy settings before invoking other commands whose behavior they may affect. See also policy CMP0000."

Find an affected KDE git repo where in the top level CMakeLists.txt before cmake_minimum_required() exist non empty lines, no comment lines, but lines that contain CMake source code. Do a MR like https://invent.kde.org/graphics/kolourpaint/-/merge_requests/23

Example: I install Microsoft Visual Studio Code and I make sure that "code" is in $PATH. I build all KDE git repos: kdesrc-build without parameters. In ~/.config/kdesrc-buildrc I have: directory-layout invent In konsole: cd ~/kde/src code . # This will start VS Code. In VS Code main menu > View > Search Ctrl+Shift+F. In the Search field write: cmake_minimum_required in the field "files to include" write: CMakeLists.txt Press F4 one hundred times. It will go through all of the lines that contain "cmake_minimum_required" in all of the files named "CMakeLists.txt". You probably do not want to edit the CMakeLists.txt file from subdirectories named like 3rdparty. These directories are a non KDE project, which has its upstream git repo outside invent.kde.org. Fix the issues in third party libraries in their upstream git repo.

KDE wiki

You should probably not edit old or archived wiki pages. E.g. https://community.kde.org/Schedules/Applications/17.04_Feature_Plan Do not edit wiki pages about an event from 10 years ago, e.g. https://community.kde.org/KDE_PIM/Meetings/Osnabrueck_4. Do not edit wiki pages about old technologies e.g. maemo, QtWebKit, KDE 4, Qt4, QBS etc. Spell check and grammar check a random KDE wiki page

E.g. Create a new Google Doc named “SpellCheck”. In the web browser: https://community.kde.org/index.php?title=Special:Random takes you to: https://community.kde.org/Get_Involved Ctrl+A Ctrl+C.

In the Google Doc: Ctrl+Shift+V. From the Google Doc main menu > Tools > Spelling and grammar > Spelling and grammar check. It says that we should replace: "KDE's Quality Assurance team tests pre-release software and proposed changed to make sure that everything works properly!" with: "KDE's Quality Assurance team tests pre-release software and proposes changes to make sure that everything works properly!" In the web browser: edit the KDE wiki page to fix the spelling or grammar error.

In a random KDE wiki page, URL links should work correctly

E.g. In the web browser: https://community.kde.org/index.php?title=Special:Random takes you to: https://community.kde.org/Incubator/Projects/Rkward you click on the URL: "Its features can be extended by plugins, and it's all free software (Above information from the current Rkward homepage." http://rkward.sourceforge.net/wiki/Main_Page This takes you to: https://rkward.kde.org/Main_Page which is a web page that does not exist.

Edit the KDE wiki such that you replace the invalid URL "http://rkward.sourceforge.net/wiki/Main_Page" with a valid URL. Which in this case is the canonical homepage of the project rkward. I.e. https://apps.kde.org/rkward/ . This URL is probably better than the other possibility: https://rkward.kde.org/ .

In a random KDE wiki page, the wiki markup should be correct

Learn wikipedia/mediawiki wiki markup syntax. E.g. https://www.mediawiki.org/wiki/Help:Formatting , https://www.mediawiki.org/wiki/Cheatsheet

E.g. In the web browser: https://community.kde.org/index.php?title=Special:Random takes you to: https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging You should be logged in. You edit the page (in the left hand side of the page Actions > Edit).

You see that "=" is used instead of "==". https://www.mediawiki.org/wiki/Help:Formatting says "Section formatting – only at the beginning of the line ... == Level 2 == ... Skip Level 1, it is page name level.". So you replace all "=" with "==". Make sure that the Table of Contents stays the same. E.g. https://community.kde.org/index.php?title=Guidelines_and_HOWTOs%2FBug_triaging&type=revision&diff=95496&oldid=95495

KDE Craft

Besides kdesrc-build. KDE has another tool that can build KDE git repos: KDE Craft. https://community.kde.org/Craft

E.g. choose a KDE git repo. E.g. kcalc. Choose one of the operating systems supported by KDE Craft. One of Microsoft Windows, Apple macOS, Linux or FreeBSD. E.g. Linux. Create a Linux VM, install KDE Craft in this VM. In konsole: craft kcalc Run the newly built/downloaded and installed kcalc.

Run executable using a run time analyzer

This is neither easy, nor suitable for beginners.

Build a KDE git repo that is not a framework or a library. I.e. build a KDE app. Make sure that you have kdesrc-build configured to build using CMake build configuration "Debug". I.e. in ~/.config/kdesrc-buildrc I have: cmake-options -DCMAKE_BUILD_TYPE=Debug

E.g. build kcalc: In konsole: kdesrc-build kcalc Then run kcalc under valgrind.

If valgrind says that there is an issue. And if the issue is not in Mesa or in Qt. But the issue is in one of the KDE git repos, e.g. a memory leak. valgrind will say the line where the leak occurs.

Spell check all GUI strings

The KDE git repos use GNU gettext and .po files for translating the Graphical User Interface elements such as buttons and menus. Look through all of the KDE git repos, through all of the en.po files and make sure that there are no typos.

E.g. build all KDE git repos using kdesrc-build. Run: kdesrc-build without parameters. In konsole:

cd ~/kde/src grep --include=*.po -r msgid . | grep /en.*/ | sort -u | sed 's/[^a-zA-Z ]/ /g' | tr 'A-Z ' 'a-z\n' | grep '[a-z]' | sort -u | comm -23 - <(sort /usr/share/dict/words) > ~/GuiWordsNotInDictionary.txt kate ~/GuiWordsNotInDictionary.txt

E.g. we find the probably wrong word "disactived". In konsole: cd ~/kde/src code . In VS Code: Search for the word "disactived". Files to exclude "*.po". There is just one single result: ~/kde/src/clementine/src/widgets/osd.cpp line 251 "tr("Wii Remote %1: disactived")". You edit file ~/kde/src/clementine/src/widgets/osd.cpp and replace: disactived with: deactivated With just this one line change in the source code, you do one git commit and one MR.