<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Decrypted Mind: Articles About Debian</title><link href="https://blog.sandroknauss.de/" rel="alternate"></link><link href="https://blog.sandroknauss.de/categories/debian/feed.xml" rel="self"></link><id>urn:uuid:552b9a6e-d068-3ddf-881e-57c16233a1de</id><updated>2024-12-01T00:00:00Z</updated><author><name></name></author><entry><title>QML Dependency tracking in Debian</title><link href="https://blog.sandroknauss.de/QMLDependencyTrackingInDebian/" rel="alternate"></link><updated>2024-12-01T00:00:00Z</updated><author><name>Sandro Knauß</name></author><id>urn:uuid:6d5d0d41-5e33-3eb6-a740-9e38f2dd350f</id><content type="html">&lt;p&gt;Tracking library dependencies work in Debian to resolve from symbols usage to a library and add this to the list of dependencies.
That is working for years now.
The KDE community nowadays create more and more QML based applications.
Unfortunately QML is a interpreted language, this means missing QML dependencies will only be an issue at runtime.&lt;/p&gt;
&lt;p&gt;To fix this I created &lt;code&gt;dh_qmldeps&lt;/code&gt;, that searches for QML dependencies at build time and will fail if it can't resolve the QML dependency.&lt;/p&gt;
&lt;p&gt;Me didn't create an own QML interpreter, just using &lt;code&gt;qmlimportscanner&lt;/code&gt; behind the scenes and process the output further to resolve the QML modules to Debian packages.&lt;/p&gt;
&lt;p&gt;The workflow is like follows:&lt;/p&gt;
&lt;p&gt;The package compiles normally and split to the binary packages.
Than dh_qmldeps scans through the package content to find QML content ( &lt;code&gt;.qml&lt;/code&gt; files, or &lt;code&gt;qmldir&lt;/code&gt;for QML modules).
All founded files will be scanned by &lt;code&gt;qmlimportscanner&lt;/code&gt;, the output is a list of depended QML modules.
As QML modules have a standardized file path, we can ask the Debian system, which packages ship this file path.
We end up with a list of Debian packages in the variable &lt;code&gt;${qml6:Depends}&lt;/code&gt;.
This variable can be attached to the list of dependencies of the scanned package.
A maintainer can also lower some dependencies to Recommends or Suggest, if needed.&lt;/p&gt;
&lt;p&gt;You can find the source code &lt;a href="https://salsa.debian.org/qt-kde-team/pkg-kde-tools/-/blob/master/pythonlib/qmldeps.py"&gt;on salsa&lt;/a&gt; and usage documentation you can find on &lt;a href="https://qt-kde-team.pages.debian.net/dh_qmldeps.html"&gt;https://qt-kde-team.pages.debian.net/dh_qmldeps.html&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The last weeks I now enabled &lt;code&gt;dh_qmldeps&lt;/code&gt; for newly every package, that creates a QML6 module package.
So the first bugs are solved and it should be usable for more packages.&lt;/p&gt;
&lt;p&gt;By scanning with &lt;code&gt;qmlimportscanner&lt;/code&gt; trough all code, I found several non-existing QML modules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;import QtQuick3DPrivate&lt;/code&gt; qt6-multimedia - no Private QML module &lt;a href="https://bugreports.qt.io/browse/QTBUG-131753"&gt;QTBUG-131753&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;import QtQuickPrivate&lt;/code&gt; qt6-graphs - no Private QML module &lt;a href="https://bugreports.qt.io/browse/QTBUG-131754"&gt;QTBUG-131754&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;import QtQuickTimeline&lt;/code&gt; qt6-quicktimeline - the correct QML name is &lt;code&gt;QtQuick.Timeline&lt;/code&gt; &lt;a href="https://bugreports.qt.io/browse/QTBUG-131755"&gt;QTBUG-131755&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;import QtQuickControls2&lt;/code&gt; qt6-webengine -  looks like a porting bug as the QML6 modules name is &lt;code&gt;QtQuick.Controls&lt;/code&gt; &lt;a href="https://bugreports.qt.io/browse/QTBUG-131756"&gt;QTBUG-131756&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;import QtGraphicalEffects&lt;/code&gt; kquickimageeditor - the correct name is for QML6 is &lt;code&gt;qt5compat.graphicaleffects&lt;/code&gt;, properly as it is an example nobody checks it &lt;a href="https://invent.kde.org/libraries/kquickimageeditor/-/issues/7"&gt;kquickimageeditor!7&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;YEAH - the first milestone is reached.
We are able to simply handle QML modules.&lt;/p&gt;
&lt;p&gt;But QML applications there is still room for improvement.
In apps the QML files are inside the executable.
Additionally applications create internal QML modules, that are shipped directly in the same executable.
I still search for a good way to analyse an executable to get a list of internal QML modules and a list of included QML files.
Any ideas are welcomed :)&lt;/p&gt;
&lt;p&gt;As workaround &lt;code&gt;dh_qmldeps&lt;/code&gt; scans currently all QML files inside the application source code.&lt;/p&gt;
</content></entry><entry><title>Akademy 2024 in Würzburg</title><link href="https://blog.sandroknauss.de/akademy-2024/" rel="alternate"></link><updated>2024-11-26T00:00:00Z</updated><author><name>Sandro Knauß</name></author><id>urn:uuid:b8d41f63-0526-3307-af67-c015b5f56746</id><content type="html">&lt;p&gt;In order to prepare for the Akademy I started some days before to give my Librem 5 ( an Open Hardware Phone) another try and ended up with a non starting Plasma 6.
Actually this issue was known already, but hasn't been addressed.
In the end I reached the Akademy with my Librem 5 having phosh installed (which is Gnome based), in order to have something working.&lt;/p&gt;
&lt;p&gt;I met Bushan and Bart who took care and the issue was fixed two days later I could finally install Plasma 6 on it.
The last time I tested my Librem 5 with Plasma 5 it felt sluggish and not well working.
But this time I was impressed how well the system reacts.
Sure there are some things here and there, but in the bigger picture it is quite useable.
One annoying issue is that the camera is only working with one app and the other issue is the battery capacity, you have to charge it once a day.
Because of missing a QR reader that can use the camera, getting data to the phone was quite challenging.
Unfortunately the conference Wifi separated the devices and I couldn't use KDE Connect to transfer data.
In the end the only way to import data was taking five photos from the QR Code to import my D-Ticket to Itinerary.&lt;/p&gt;
&lt;p&gt;With a device with Plasma Mobile, it directly was used for a experiment: How well does Dolphin works on a Plasma Mobile device.
Together with Felix Ernst we tried it out and were quite impressed, that Dolphin does work very well on Plasma Mobile, after some simple modifications on the UI.
That resulted in a patch to add a mobile UI for Dolphin &lt;a href="https://invent.kde.org/system/dolphin/-/merge_requests/826"&gt;!826&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With more time to play with my Librem 5 I also found an bug in KWeather, that is missing a Refresh option, when used in a Plasma Mobile environment &lt;a href="https://bugs.kde.org/show_bug.cgi?id=493656"&gt;#493656&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Akademy is a good place to identify and solve some issues.
It is always like that, you chat with someone and they can tell you who to ask to answer the concrete question and in the end you can solve things, that seems unsolvable in the beginning.&lt;/p&gt;
&lt;p&gt;There was also time to look into the travelling app Itinerary.
A lot people are faced with a lot of real world issues, when not in their home town.
Itinerary is the best traveling apps I know about.
It can import nearly every ticket you have and can get location information from restaurant websites and allow routing to that place. It does add many useful information, while traveling like current delays, platform changes, live updates for elevator, weather information at the destination, a station map and all those features with strong focus on privacy.&lt;/p&gt;
&lt;p&gt;In detail I found some small things to improve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If you search for a bus ride and enter the correct name for the bus stop, it will still add some walk from and to the station. The issue here is that we use different backends and not all backends share the same geo coordinate. That's why Itinerary needs to add some heuristics to delete those paths.
&lt;img src="https://blog.sandroknauss.de/akademy-2024/itinerary_walk.png" alt="walk to and from the bus stop"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instead of displaying just a small station map of one bus stop in the inner city, it showed complete Würzburg inner city, as there is one big park around the inner city (named "Ringpark").&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Würzburg has a quite big bus station but the platform information were missing in the map, so we tweaked the CSS to display the platform. To be sure, that we don't fix only Würzburg, we also looked at Greifswald and Aix-en-Provence if they are following the same name scheme.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I additionally learned that it has a lot of details that helps people who have special needs.
That is the reason why Daniel Kraut wants to get Itinerary available for iOS.
As spoken out, that Daniel wants to reach this goal, others already started to implement the first steps to build apps for iOS.&lt;/p&gt;
&lt;p&gt;This year I was volunteering in helping out at Akademy.
For me it was a lot of fun to meet everyone at the infodesk or help the speakers setup the beamer and microphone.
It is also a good opportunity to meet many new faces and get in contact with them.
I see also room for improvement.
As we were quite busy at the Welcome Event to get out the badges to everyone, I couldn't answer the questions from newcomers, as the queue was too long.
I propose that some people volunteer to be available for questions from newcomers.
Often it is hard for newcomers to get their first contact(s) in a new community.
There is a lot of space for improvement to make it easier for newcomers to join.
Some ideas in my head are: Make an event for the newcomers to get them some links into the community and show that everyone is friendly.
The tables at the BoFs should make a circle, so everyone can see each other.
It was also hard for me to understand everyone as they mostly spoken towards the front.
And then BoFs are sometimes full of very specific words and if you are not already deep in the topic you are lost.
I can see the problem, on the one side BoFs are also the place where the person that knows the topic already wants to get things done.
On the other side new comers join BoFs, are overwhelmed by to many new words get frustrated and think, that they are not welcome.
Maybe at least everyone should present itself with name and ask new faces, why they joined the BoF to help them joining.&lt;/p&gt;
&lt;p&gt;I'm happy, that the food provided for the attendees was very delicious and that I'm not the only one mostly vegetarian with a big amount to be vegan.&lt;/p&gt;
&lt;p&gt;At the conference the KDE Eco initiation really caught me, as I see a lot of new possibilities in giving more reasons to switch to an Open Source system.
The talk from Natalie was great to see how pupils get excited about Open Source and also help their grandparents to move to a Linux system.
As I also will start to work as a teacher, I really got ideas what I can do at school.
Together with Joseph and Nicole, we finally started to think about how to drive an exploration on what kind of old hardware is still KDE software running.
The ones with the oldest hardware will get an old KDE shirt.
For more information see &lt;a href="https://invent.kde.org/teams/eco/opt-green/-/issues/40"&gt;#40&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The conference was very motivating for me, I also had still energy at the evening to do some Debian packaging and finally pushed kweathercore to Debian and started to work on KWeather.
Now I'm even more interested in the KDE apps focusing the mobile world, as I now have some hardware that can actually use those apps.&lt;/p&gt;
&lt;p&gt;I really enjoyed the workshop how to contribute to Qt by Volker Hilsheimer, especially the way how Volker explained things in a very friendly way, answered every question, sometime postponed some questions but came back to them later.
All in all I now have a good overview how Qt is doing development and how I can fix bugs.&lt;/p&gt;
&lt;p&gt;The daytrip to Rothenburg ob der Tauber was very interesting for me.
It was the first time I visited the village. But in my memory it feels like I know the village already. I grew up with reading  a lot of comic albums including the good SiFi comic album series "Yoku Tsuno" created by the Belgian writer Roger Leloup.
Yoku Tsuno is an electronics engineer, raised in Japan but now living in Belgium. In "On the edge of life" she helps her friend Ingard, who actually lives in Rothenburg. Leloup invested a lot of time to travel to make the make his drawings as accurate as possible.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.sandroknauss.de/akademy-2024/yoko_rothenburg-750x726.png" alt="a comic page with Yoko Tsuno in Rothenburg ob der Tauber"&gt;&lt;/p&gt;
&lt;p&gt;In order to not have a hard cut from Akademy to normal life, I had a lunch with Carlos, to discuss KDE Neon and how we can improve the interaction with Debian.
In the future this should have less friction and make both communities work together more smoothly.
Additionally as I used to develop on KDEPIM with the help of Docker images based on Neon I ask for a meta kf6 dev meta package.
That should help to get rid of most hand written lists of dev packages in the Docker file in order to make it more simple for new contributors to start hacking on KDEPIM.&lt;/p&gt;
&lt;p&gt;The rest of the day I finally found time to do the normal tourist stuff: Going to the Wine bridge and having a walk to the castle of Würzburg.
Unfortunately you hear a lot of car noises up there, but I could finally relaxe in a Japanese designed garden.&lt;/p&gt;
&lt;p&gt;Finally at Saturday I started my trip back.
The trains towards Eberswalde are broken and I needed to find alternative routing.
I got a little bit nervous, as it was the first time I travelled with my Librem 5 and Itinerary only and needed to reach the next train in less than two mins. 
With the indoor maps provided, I could prepare my run through the train station so I reached successfully my next train.&lt;/p&gt;
&lt;p&gt;By the way, also if you only only use KDE software, I would recommend everyone to join Akademy ;)&lt;/p&gt;
</content></entry><entry><title>Bugzilla integration for KDE Project API</title><link href="https://blog.sandroknauss.de/bugzilla-project-api/" rel="alternate"></link><updated>2020-11-02T00:00:00Z</updated><author><name>Sandro Knauß</name></author><id>urn:uuid:e6fabe10-02f9-3c26-b5a7-22cf1ef252d0</id><content type="html">&lt;p&gt;The KDE Bugzilla handles a lot of projects and they often match with the repo name, but not always.
For instance we have ancient products and components at Bugzilla, as projects have a lifecycle from playground into Release Service, or Frameworks, sometimes with a change of name.
So you may end up searching Bugzilla quite awhile for the correct product and component to be able to confirm or create bug reports against an application.
Let's have a look at &lt;a href="https://invent.kde.org/frameworks/kpeople"&gt;KPeople&lt;/a&gt;, and see why the situation is complicated.
You find &lt;a href="https://bugs.kde.org/describecomponents.cgi"&gt;two products in KDE Bugzilla&lt;/a&gt;: &lt;a href="https://bugs.kde.org/buglist.cgi?order=changeddate%2Cpriority%2Cbug_severity&amp;amp;product=kpeople"&gt;kpeople&lt;/a&gt; (the repository's name) and on the other hand Frameworks have the scheme of a "frameworks-" prefix: &lt;a href="https://bugs.kde.org/buglist.cgi?order=changeddate%2Cpriority%2Cbug_severity&amp;amp;product=frameworks-kpeople"&gt;frameworks-kpeople&lt;/a&gt;.
From the data displayed even I as a developer am unable to tell which is the correct product to add new bug reports. Both have bug reports this year that got fixed and the number of bug reports is too low to get a clear picture of which to choose.&lt;/p&gt;
&lt;p&gt;This is not only a problem of KDE; it is a general problem in different communities that it is hard for newcomers to find the correct place to search and add new bug reports.&lt;/p&gt;
&lt;p&gt;That's why Debian added the bug report information for every package.
This should help users to search the upstream bug reports or create new ones (Bug-Submit and Bug-Database): &lt;a href="https://wiki.debian.org/UpstreamMetadata#Fields"&gt;https://wiki.debian.org/UpstreamMetadata#Fields&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;While I was collecting this information for Frameworks and KDE PIM, I wondered why KDE does not have links between each project and Bugzilla.
After some searching and discussions it became obvious, that KDE does not have this information that can be processed.
Okay let's fix this.
The obvious place to reach this information is the &lt;a href="https://invent.kde.org/sysadmin/projects-api"&gt;Project API&lt;/a&gt; available under &lt;a href="https://projects.kde.org/api/"&gt;https://projects.kde.org/api/&lt;/a&gt;.
To reach this goal I began adding Bugzilla information to the data source of the Project API named &lt;a href="https://invent.kde.org/sysadmin/repo-metadata"&gt;Git Repo Metadata&lt;/a&gt;.
Then a merge request later the Project API is able to generate the links to Bugzilla &lt;a href="https://invent.kde.org/sysadmin/projects-api/-/merge_requests/2"&gt;invent:sysadmin/projects-api!2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Where you should search for bugs in kontact? Go to &lt;a href="https://projects.kde.org/api/v1/identifier/kontact"&gt;https://projects.kde.org/api/v1/identifier/kontact&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bug_database: &lt;a href="https://bugs.kde.org/buglist.cgi?product=kontact&amp;amp;resolution=---"&gt;https://bugs.kde.org/buglist.cgi?product=kontact&amp;amp;resolution=---&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;bug_submit: &lt;a href="https://bugs.kde.org/enter_bug.cgi?product=kontact"&gt;https://bugs.kde.org/enter_bug.cgi?product=kontact&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After implementing the needed bits I found out that Nicolas Alvarez had the same idea, to store Bugzilla information in Git Repo Metadata &lt;a href="https://invent.kde.org/sysadmin/repo-metadata/-/commit/085d878eaf6cfac541376be753b80829a087519a"&gt;invent:sysadmin/repo-metadata@085d878ea&lt;/a&gt;.
Fortunately I can say that since June the information are used by Project API.&lt;/p&gt;
&lt;p&gt;So now, back to my task to add upstream metadata to Debian packages.
After I filled the needed information to Repo Metadata I created a script to update the links in Debian &lt;a href="https://salsa.debian.org/qt-kde-team/pkg-kde-dev-scripts/-/blob/013b0937ac37b43669c139321ea719b4273fabfa/function_collection/functions_plasma.py#L129"&gt;salsa:qt-kde-team/pkg-kde-dev-scripts/function_collection/functions_plasma.py:addMissingBugMetadatafields&lt;/a&gt;.
This should hopefully help to always point to the correct Bugzilla links in future.&lt;/p&gt;
&lt;p&gt;A random list came to my mind of places that may benefit from the Bugzilla information in Git Metadata Repository:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Links from API documentation directly to the Bugzilla.&lt;/li&gt;
&lt;li&gt;We can use this information in scripts that adds the new version to Bugzilla (e.g. &lt;a href="https://invent.kde.org/sdk/releaseme/-/blob/master/plasma/plasma-add-bugzilla-versions"&gt;invent:sdk/releaseme/plasma/plasma-add-bugzilla-versions&lt;/a&gt; has currently a static list of Bugzilla products).&lt;/li&gt;
&lt;li&gt;For DrKonqui this information may also useful.
The mapping binary -&amp;gt; bugzilla is currently handcrafted in &lt;a href="https://invent.kde.org/plasma/drkonqi/-/blob/master/src/data/mappings"&gt;invent:plasma/drkonqi/src/data/mappings&lt;/a&gt;.
This is NOT the low hanging fruit, but maybe someone feels inspired to play with the available data and who is checking each handcrafted entry in that file to still be correct?
The mapping repo -&amp;gt; binary we get by our CI, because when we build the stuff, we know what we built.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The truth is, that Nicolas is right that adding the Bugzilla links are a manual task.
But on the other hand, let's add this information once at one place and than we can use it at several places.&lt;/p&gt;
&lt;p&gt;Please help adding this information; it is simple a yaml file.
If you see the data missing &lt;a href="https://invent.kde.org/sysadmin/repo-metadata/-/commit/84786036c8f119d607658840824c30596e678d31"&gt;example commit&lt;/a&gt; and create a &lt;a href="https://invent.kde.org/sysadmin/repo-metadata/-/merge_requests"&gt;merge request&lt;/a&gt;.
Or you can also give me the data and I'll add it.&lt;/p&gt;
</content></entry><entry><title>Kontact on Debian</title><link href="https://blog.sandroknauss.de/kontact-on-debian/" rel="alternate"></link><updated>2017-12-21T00:00:00Z</updated><author><name>Sandro Knauß</name></author><id>urn:uuid:b8f8ef4f-818d-369d-a0da-d3ae3842c1c7</id><content type="html">&lt;p&gt;When coding at Kontact you normally don't have to care a lot about dependencies in between the different KDE Pim packages, because there are great tools available already. &lt;a href="https://kdesrc-build.kde.org/"&gt;kdesrc-build&lt;/a&gt; finds a solution to build all KDE Pim packages in the correct order. The &lt;a href="https://community.kde.org/KDE_PIM/Docker"&gt;KDE Pim docker image&lt;/a&gt; gives you an environment with all dependencies preinstalled, so you can start hacking on KDE Pim directly.&lt;/p&gt;
&lt;p&gt;While hacking on &lt;code&gt;master&lt;/code&gt; is nice, most users are not using &lt;code&gt;master&lt;/code&gt; on their computers in daily life. To reach the users, distributions need to compile and ship KDE Pim. I am active within Debian and would like to make the newest version of KDE Pim available to Debian users. Because &lt;a href="https://wiki.qt.io/New_Features_in_Qt_5.5#Deprecated_Functionality"&gt;Qt deprecated Qt Webkit within Qt 5.5&lt;/a&gt; KDE Pim had to switch from &lt;a href="https://wiki.qt.io/Qt_WebKit"&gt;Qt Webkit&lt;/a&gt; to &lt;a href="https://wiki.qt.io/Qt_WebEngine"&gt;Qt WebEngine&lt;/a&gt;. Unfortunately Qt WebEngine wasn't available in Debian, so I had to package Qt WebEngine for Debian before packaging KDE Pim for Debian. Qt WebEngine itself is a beast to package. It was only possible to package Qt WebEngine for the last stable release named "Stretch" in time with the help of others of the Debian Qt/KDE mainatiners especially Scarlett Clark, Dmitry Shachnev and Simon Quigley, and we could only upload it some hours before the deep freeze. So if you have asked yourself why Debian doesn't ship 16.08 within their last stable release, this is the answer. The missing dependency for KDE Pim named Qt WebEngine.
There is a second consequence of the switch: Kontact will only be available for those architectures that are supported by Qt WebEngine. Of &lt;a href="https://buildd.debian.org/status/package.php?p=kontact"&gt;19 supported architectures for 16.04&lt;/a&gt;, we can only support &lt;a href="https://buildd.debian.org/status/package.php?p=qtwebengine-opensource-src"&gt;five architectures&lt;/a&gt; in future.&lt;/p&gt;
&lt;p&gt;Now after Debian has woken up again from its slumber, we first had to update Qt and KDE Frameworks. After the first attempt at packaging KDE Pim 17.08.0, that was released for experimental, we are now finally reaching the point where we can package and deliver KDE Pim 17.08.3 to Debian unstable. Because Pino Toscano and I had time we started packaging it and stumbled across the issue of having to package 58 source packages, all dependent on each other. Keep in mind all packaging work is not a oneman or twoman show, mostly all in the Qt/KDE Debian mantainers are involved somehow. Either by putting their name under a upload or by being available via IRC, mail and answering questions, making jokes or doing what so ever. &lt;a href="https://jriddell.org/2016/08/05/kontact-build-dependencies/"&gt;Jonathan Riddell visualized the dependencies for KDE Pim 16.08 with graphviz&lt;/a&gt;. But KDE Pim is a fast moving target, and I wanted to make my own graphs and make them more useful for packaging.&lt;/p&gt;
&lt;p&gt;&lt;a href="fullgraph.svg"&gt;&lt;img src="fullgraph.svg#fullsize" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The dependencies you see on this graph are created out of the Build dependencies within Debian for KDE Pim 17.08. I stripped out every dependency that isn't part of KDE Pim. In contrast to Jonathan, I made the arrows from dependency to package. So the starting point of the arrow is the dependency and it is pointing to the packages that can be built from it. The green colour shows you packages that have no dependency inside KDE Pim. The blue indicates packages with nothing depending on them. But to be honest, neither Jonathan's nor my graph tells me any more than they do you. They are simply too convoluted. The only thing these graphs make apparent is that packaging KDE Pim is a very complex task :D&lt;/p&gt;
&lt;p&gt;But fortunately we can simplify the graphs. For packaging, I'm not interested in "every" dependency, but only in "new" ones. That means, if a &lt;code&gt;&amp;lt;package&amp;gt;&lt;/code&gt; depends on &lt;code&gt;a&lt;/code&gt;,&lt;code&gt;b&lt;/code&gt; and &lt;code&gt;c&lt;/code&gt;, and &lt;code&gt;b&lt;/code&gt; depends on &lt;code&gt;a&lt;/code&gt;, than I know: Okay, I need to package &lt;code&gt;b&lt;/code&gt; and &lt;code&gt;c&lt;/code&gt; before &lt;code&gt;&amp;lt;package&amp;gt;&lt;/code&gt; and &lt;code&gt;a&lt;/code&gt; before &lt;code&gt;b&lt;/code&gt;. I would call a an implicit dependency of &lt;code&gt;&amp;lt;package&amp;gt;&lt;/code&gt;. Here again in a dot style syntax:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;a -&amp;gt; &amp;lt;package&amp;gt;
b -&amp;gt; &amp;lt;package&amp;gt;
c -&amp;gt; &amp;lt;package&amp;gt;
a -&amp;gt; b
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;can be simplified to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;b -&amp;gt; &amp;lt;package&amp;gt;
c -&amp;gt; &amp;lt;package&amp;gt;
a -&amp;gt; b
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With this quite simple rule to strip all implicit dependencies out of the graph we end up with a more useful one:&lt;/p&gt;
&lt;p&gt;&lt;a href="pim-build-deps-17.08.png"&gt;&lt;img src="pim-build-deps-17.08.png#fullsize" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(You can find the dot file and the code to create such a graph at &lt;a href="https://qt-kde-team.pages.debian.net/applications-17.08-build-deps.html"&gt;pkg-kde.alioth.debian.org&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;At least this is a lot easier to consume and create a package ordering from. But still it looks scary. So I came up with the idea to define tiers, influenced by the tier model in KDE Frameworks. I defined one tier as the maximum set of packages that are independent from each other and only depend on lower tiers:&lt;/p&gt;
&lt;p&gt;&lt;a href="pim-build-tier-17.08.png"&gt;&lt;img src="pim-build-tier-17.08.png#fullsize" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(The dot file and the code to create such a graph you can find at &lt;a href="https://qt-kde-team.pages.debian.net/applications-17.08-build-deps.html"&gt;pkg-kde.alioth.debian.org&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Additionally I only show the dependencies, from the last tier to the current one. So a dependency from &lt;code&gt;tier 0 -&amp;gt; tier 1&lt;/code&gt; but not from &lt;code&gt;tier 0 -&amp;gt; tier 2&lt;/code&gt;. That's why it looks like nothing depends on &lt;code&gt;kdav&lt;/code&gt; or &lt;code&gt;ktnef&lt;/code&gt;. But the ellipse shape tells you, that in higher tiers something depends on them. The lightblue diamond shaped ones in contrast indicating, nothing depending on them anymore. So here you can see the "hotpath" for dependencies. This shows that the bottleneck is &lt;code&gt;libkdepim-&amp;gt;pimcommon&lt;/code&gt;. Interestingly this is also, more or less, the border between the former split of kdepimlibs and kdepim during KDE SC 4 times.
I think this is a useful visualization of the dependencies and may be a starting point to define a goal, what the dependencies should look like.&lt;/p&gt;
&lt;p&gt;You also may ask yourself why an application needs so much more tiers than complete KDE Frameworks? Well, the third tier of KDE Frameworks is more of a collection for leftovers that don't reach tier 1 or tier 2. See the definition of tier 3 is: &lt;a href="https://community.kde.org/Frameworks/Policies"&gt;"Tier 3 Frameworks can depend only on other Tier 3 Frameworks, Tier 2 Frameworks, Tier 1 Frameworks, Qt official frameworks, or other system libraries."&lt;/a&gt;. The relevant part is that a framework tier 3 can depend on other tier 3 frameworks. If you use my tier definition in contrast, then you end up with more than ten tiers for KDE Frameworks, too.&lt;/p&gt;
&lt;p&gt;After building all of these nice graphs for Debian, I wanted to see if I could create such graphs for KDE Pim directly. As KDE is mostly using the &lt;a href="https://cgit.kde.org/kde-build-metadata.git/"&gt;kde-build-metadata.git&lt;/a&gt; for documenting dependencies I updated my scripts to create graphs from this data directly:
&lt;a href="kde-build-metadata-17-12-deps.svg"&gt;&lt;img src="kde-build-metadata-17-12-deps.svg#fullsize" alt=""&gt;&lt;/a&gt;
&lt;a href="../kde-build-metadata-17-12-tier.svg"&gt;&lt;img src="kde-build-metadata-17-12-tier.svg#fullsize" alt=""&gt;&lt;/a&gt;
(the code to build the graphs yourselves is available here: &lt;a href="https://web.archive.org/web/20171222041517/https://cgit.kde.org/kde-dev-scripts.git/tree/pim-build-deps-graphs.py"&gt;kde-dev-scripts.git/pim-build-deps-graphs.py&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;In detail this graph looks different and not just because of the version difference (&lt;code&gt;17.08&lt;/code&gt; vs. &lt;code&gt;master&lt;/code&gt;). I think we need to update the dependencies data. This also may explain why sometimes kdesrc-build don't manage it to compile complete KDE Pim in the first run.&lt;/p&gt;
</content></entry></feed>