Jump to content

GSoC/2021/StatusReports/AnjaniKumar: Difference between revisions

From KDE Community Wiki
Anjani (talk | contribs)
No edit summary
Anjani (talk | contribs)
No edit summary
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
== digiKam: Port to Qt6 on Linux ==
== digiKam: Port to Qt6 on Linux ==


digiKam is a professional photo management software. With the release of Qt6, digiKam needs to to adapt to many new improvements made possible with the new Qt6 framework such as code readability, better classes from Qt6 and new unit tests. Since digiKam's code-base is huge, a proper plan had to be agreed upon to achieve the goal in the GSoC timeline.  
digiKam is a professional photo management software. With the release of Qt6, digiKam needs to to adapt to many new improvements made possible with the new Qt6 framework such as code readability, better classes from Qt6 and new unit tests.  


== Mentors ==
== Mentors ==
Line 16: Line 16:


* [https://invent.kde.org/graphics/digikam/-/tree/gsoc21-qt6-port My Work branch]
* [https://invent.kde.org/graphics/digikam/-/tree/gsoc21-qt6-port My Work branch]
* [https://invent.kde.org/graphics/digikam/-/commits/gsoc21-qt6-port?author=Anjani%20Kumar Commits]


== Goals ==
== Goals ==


* To build digiKam with current Qt6 stable release.  
* To prepare digiKam for Qt6 stable release in future.  
* Prepare digiKam so that it can be built with later Qt6 releases as well.
* Test for regressions and fix them
* Write new AppImage builder scripts
* Write new AppImage builder scripts for future Qt6 release


== Status Report ==
== Community Bonding (May 18 - June 6) ==
 
=== Community Bonding (May 18 - June 6) ===


We discussed the proposal again and made some strategies on the first task and how to test the new patches.The first task was to '''Port digiKam to Qt 5.15'''. This is a sophisticated task and involves a lot of sub-steps like:
We discussed the proposal again and made some strategies on the first task and how to test the new patches.The first task was to '''Port digiKam to Qt 5.15'''. This is a sophisticated task and involves a lot of sub-steps like:
Line 62: Line 62:
The latter was safer as dealing with a lot of Qt classes in the same file might have led to regressions which were difficult to track down.
The latter was safer as dealing with a lot of Qt classes in the same file might have led to regressions which were difficult to track down.


So I started early in this time only so that I don't get stuck in the coding period. I started picking Qt classes with few usages and started porting them. These were ''QMap'', ''QPrinter''. I faced some difficulty but my mentor's feedback helped me a lot and learnt quickly. More about this period in the blog post.
So I started early in this time only so that I don't get stuck in the coding period. I started picking Qt classes with few usages and started porting them. These were ''QMap'', ''QPrinter''. I faced some difficulty but my mentor's feedback helped me a lot and was able to learn quickly. More about this period in the blog post.


==== Related blog ====
=== Blog ===


https://anjani.live/posts/gsoc-community-bonding/
https://anjani.live/posts/gsoc-community-bonding/


=== Coding Period (June 7 - August 16)===
== Coding Period (June 7 - August 16)==


==== Week 1 ====
=== Week 1 ===


I patched a lot of warnings mostly from Qt classes that had fewer warnings. I also wrote a new unit test for FilterAction class. This test was related to ''QHash'' warnings. The test checked if all keys are unique in a QHash in FilterAction class.  
I patched a lot of warnings mostly from Qt classes that had fewer warnings. I also wrote a new unit test for FilterAction class. This test was related to ''QHash'' warnings. The test checked if all keys are unique in a QHash in FilterAction class.  
In a nutshell, there were 6693 lines of build warnings on master.With the patches on my branch these warnings reduced to 1830 lines. That’s a reduction of about 73%.
In a nutshell, there were 6693 lines of build warnings on master.With the patches on my branch these warnings reduced to 1830 lines. That’s a reduction of about 73%.


===== Related Patches =====
==== Patches ====


* [https://invent.kde.org/graphics/digikam/-/merge_requests/84 Fix QMap::unite() deprecation warning in presentation plugin ]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/84 Fix QMap::unite() deprecation warning in presentation plugin ]
Line 83: Line 83:
* [https://invent.kde.org/graphics/digikam/-/merge_requests/91 New Unit test: FilterAction Unique keys test for all filters]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/91 New Unit test: FilterAction Unique keys test for all filters]


===== Related Blog =====
==== Blog ====


https://anjani.live/posts/gsoc21-week-1/
https://anjani.live/posts/gsoc21-week-1/


==== Week 2 ====
=== Week 2 ===


Continuation of work from previous week. We also discussed about introducing STL algorithms in digiKam. Though it is huge task in its own and not related to my project so we suppressed the ''cppcheck'' warnings in report and moved on.
Continuation of work from previous week. We also discussed about introducing STL algorithms in digiKam. Though it is huge task in its own and not related to my project so we suppressed the ''cppcheck'' warnings in report and moved on.


===== Related Patches =====
==== Patches ====


* [https://invent.kde.org/graphics/digikam/-/merge_requests/95 Fix QSet issues by using only QSet constructor to make QSet objects]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/95 Fix QSet issues by using only QSet constructor to make QSet objects]
Line 101: Line 101:
* [https://invent.kde.org/graphics/digikam/-/commit/280a47d9e7ced1d1a84adba8987cddaab9768e1f Macro for Qt::SplitBehavior]
* [https://invent.kde.org/graphics/digikam/-/commit/280a47d9e7ced1d1a84adba8987cddaab9768e1f Macro for Qt::SplitBehavior]


===== Related Blog =====
==== Blog ====


https://anjani.live/posts/gsoc21-week-2/
https://anjani.live/posts/gsoc21-week-2/


==== Week 3 ====
=== Week 3 ===


During this week I patched the very old random number generators and ''qsrand()/qrand()'' in digiKam. As a result we were able to drop ''Boost::Random dependency''. I also ported ''Qt X11 Extras'' module code. A very detailed report is in the blog post.
During this week I patched the very old random number generators and ''qsrand()/qrand()'' in digiKam. As a result we were able to drop ''Boost::Random dependency''. I also ported ''Qt X11 Extras'' module code. A very detailed report is in the blog post.


===== Related patches =====
==== Patches ====


* [https://invent.kde.org/graphics/digikam/-/merge_requests/104 Remove qsrand]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/104 Remove qsrand]
Line 117: Line 117:
* [https://invent.kde.org/graphics/digikam/-/merge_requests/108 Remove deprecated QMutex usage]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/108 Remove deprecated QMutex usage]


===== Related Blog =====
==== Blog ====


https://anjani.live/posts/gsoc21-week-3/
https://anjani.live/posts/gsoc21-week-3/


==== Week 4 ====
=== Week 4 ===


In this week, digiKam was fully ported to Qt 5.15. We also started discussion on now introducing Qt6 this week. I tried building it for the first time with Qt6, it failed(no surprises here). We ran into a problem that digiKam depends on Qt WebEngine which would only be stable in Qt 6.2 in September. We discussed about possible solutions. I tried building the alpha Qt 6.2 but it doesn't build.
In this week, digiKam was fully ported to Qt 5.15. We also started discussion on now introducing Qt6 this week. I tried building it for the first time with Qt6, it failed(no surprises here!). We ran into a problem that digiKam depends on Qt WebEngine which would only be stable in Qt 6.2 in September. We discussed about possible solutions. I tried building the alpha Qt 6.2 but it doesn't build.


===== Related Patches =====
==== Patches ====


* [https://invent.kde.org/graphics/digikam/-/merge_requests/110 Replace removed QDateTime constructor with new function]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/110 Replace removed QDateTime constructor with new function]
Line 131: Line 131:
* [https://invent.kde.org/graphics/digikam/-/merge_requests/112 Isolate rajce plugin]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/112 Isolate rajce plugin]


==== Week 5 ====
=== Week 5 ===


I found the solution to problem from last week. Gilles also helped me to get started. This week I worked on porting the build system to Qt6. digiKam is huge and we have successfully branched the build process if no web module is found. A more detailed report is in the blog.
I found the solution to problem from last week. Gilles also helped me to get started. This week I worked on porting the build system to Qt6. digiKam is huge and we have successfully branched the build process if no web module is found. A more detailed report is in the blog.


===== Related Patches =====
==== Patches ====


* [https://invent.kde.org/graphics/digikam/-/merge_requests/114 Dummy webwidget]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/114 Dummy webwidget]


===== Related Blog =====
==== Blog ====


https://anjani.live/posts/gsoc21-week-5/
https://anjani.live/posts/gsoc21-week-5/


==== Week 6 ====
=== Week 6 ===


This week our goal was to port the build system in such a way that it can detect a Qt installation 5/6 and adjust accordingly. Our goal was to preserve the functionality of current Qt5 pipelines and tests. We used cmake variables and patched hardcoded Qt versions in the cmake with dynamically set variables enabling cmake configuration with both Qt5 and Qt6.  
This week our goal was to port the build system in such a way that it can detect a Qt installation 5/6 and adjust accordingly. Our goal was to preserve the functionality of current Qt5 pipelines and tests. We used cmake variables and patched hardcoded Qt versions in the cmake with dynamically set variables enabling cmake configuration with both Qt5 and Qt6.  


===== Related Patches =====
==== Patches ====


* [https://invent.kde.org/graphics/digikam/-/merge_requests/119 Port CMake files]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/119 Port CMake files]
Line 155: Line 155:
and many more can be found in the work branch.
and many more can be found in the work branch.


===== Related Blog =====
==== Blog ====


https://anjani.live/posts/gsoc21-week-6/
https://anjani.live/posts/gsoc21-week-6/


==== Week 7 ====
=== Week 7 ===


This week I worked on building digiKam with Qt6. To do this, I had to build KF5 components with Qt6 first as they are currently built with Qt5 which was a problem. I built a few modules with Qt6 but it was taking some time. If I had more time in my hands I could have completed building all required modules but we decided that we can do this later and move to work on the next task.  
This week I worked on building digiKam with Qt6. To do this, I had to build KF5 components with Qt6 first as they are currently built with Qt5 which was a problem. I built a few modules with Qt6 but it was taking some time. If I had more time in my hands I could have completed building all required modules but we decided that we can do this later and move to work on the next task.  
Line 165: Line 165:
Now I had to port ''Core5Compat'' module code to ''Qt6 Core'' code. I have explained all the work in detail in the blog post.
Now I had to port ''Core5Compat'' module code to ''Qt6 Core'' code. I have explained all the work in detail in the blog post.


===== Related Patches =====
==== Patches ====


* [https://invent.kde.org/graphics/digikam/-/merge_requests/124 Port QRegExp to QRegularExpression in dplugins]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/124 Port QRegExp to QRegularExpression in dplugins]
Line 173: Line 173:
* [https://invent.kde.org/graphics/digikam/-/merge_requests/129 Port QRegExp::exactMatch()]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/129 Port QRegExp::exactMatch()]


===== Related Blog =====
==== Blog ====


https://anjani.live/posts/gsoc21-week-7/
https://anjani.live/posts/gsoc21-week-7/


==== Week 8 ====
=== Week 8 ===


Most of this week's work was debugging the regression in Porting QRegExp to QRegularExpression in  ''advancedrename'' tool. The regression was caught by ''advancedrename_utest''. The regression was fixed by patching the advancedrename digiKam API itself. I have explained the regression and my process of fixing in the blog post so do refer that.
Most of this week's work was debugging the regression in Porting QRegExp to QRegularExpression in  ''advancedrename'' tool. The regression was caught by ''advancedrename_utest''. The regression was fixed by patching the advancedrename digiKam API itself. I have explained the regression and my process of fixing in the blog post so do refer that.
Line 188: Line 188:
For the time being, we will use ''Core5Compat'' module to keep this code working.  
For the time being, we will use ''Core5Compat'' module to keep this code working.  


===== Related Patches =====
==== Patches ====


* [https://invent.kde.org/graphics/digikam/-/merge_requests/130 Port QRegExp in advancedrename tool]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/130 Port QRegExp in advancedrename tool]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/131 Port QTextCodec]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/131 Port QTextCodec]


===== Related Blog =====
==== Blog ====


https://anjani.live/posts/gsoc21-week8/
https://anjani.live/posts/gsoc21-week8/


==== Week 9 ====
=== Week 9 ===


This week, I ported the remaining '''QRegExp''' uses in digiKam. There was another regression detected this week as well in class ''cameranamehelper''. The cause was not because of my mistake. We think that it is probably a bug in Qt. This regex pattern "''^(ptp|normal|mtp)(\\s+mode)?$''" was failing to give an exact match with '''QRegularExperssion''' class in ''case insensitive'' mode. I found a way to make it work by using a different construction style. The blog post has detailed information.   
This week, I ported the remaining '''QRegExp''' uses in digiKam. There was another regression detected this week as well in class ''cameranamehelper''. The cause was not because of my mistake. We think that it is probably a bug in Qt. This regex pattern "''^(ptp|normal|mtp)(\\s+mode)?$''" was failing to give an exact match with '''QRegularExperssion''' class in ''case insensitive'' mode. I found a way to make it work by using a different construction style. The blog post has detailed information.   


===== Related Patches =====
==== Patches ====


* [https://invent.kde.org/graphics/digikam/-/merge_requests/132 Port remaining QRegExp uses]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/132 Port remaining QRegExp uses]


===== Related Blog =====
==== Blog ====


https://anjani.live/posts/gsoc21-week9-10/
https://anjani.live/posts/gsoc21-week9-10/


==== Week 10 ====
=== Week 10 ===


In the final week of the coding period, I worked on the appimage builder scripts. There are '''4''' scripts and '''4'''' helper scripts to build appimages. The 4 main scripts are:
In the final week of the coding period, I worked on the appimage builder scripts. There are '''4''' scripts and '''4'''' helper scripts to build appimages. The 4 main scripts are:
Line 220: Line 220:
Because earlier we had decided to leave building KF5 with Qt6 for later, I could only work on the 1st script for now. My task was to patch the script so that it can build Qt '''6.2.0-beta2''' on '''Mageia 7.1'''. The script is yet to be tested fully.
Because earlier we had decided to leave building KF5 with Qt6 for later, I could only work on the 1st script for now. My task was to patch the script so that it can build Qt '''6.2.0-beta2''' on '''Mageia 7.1'''. The script is yet to be tested fully.


===== Related Patches =====
==== Patches ====


* [https://invent.kde.org/graphics/digikam/-/merge_requests/138 Draft: Build host with Qt6 for appimage]
* [https://invent.kde.org/graphics/digikam/-/merge_requests/138 Draft: Build host with Qt6 for appimage]


===== Related Blog =====
==== Blog ====


https://anjani.live/posts/gsoc21-week9-10/
https://anjani.live/posts/gsoc21-week9-10/
Line 230: Line 230:
== Final Status ==
== Final Status ==


Work in progress
The following table contains the state of porting process to Qt 5.15 on which I worked on. Please refer to above sections on links to these patches.
 
{| class="wikitable"
|+
|-
! Qt Class !! Port status !! Test status !! Documentation
|-
| QMap || Complete || Tested || Updated
|-
| QProcess || Complete || Tested || Not present
|-
| QHash || Complete || Tested || Updated
|-
| QMatrix || Complete || Tested || Updated
|-
| QSet || Complete || Untested || Not present
|-
| QButtonGroup || Complete || Untested || Not present
|-
| QWheelEvent || Complete || Untested || Not present
|-
| QLabel || Complete || Tested || Unchanged
|-
| QFlag || Complete || Tested || Not present
|-
| QTimeLine || Complete || Untested || Not present
|-
| QTabletEvent || Complete || Tested || Not present
|-
| QPrinter || Complete || Tested || Not present
|-
| QTextStream::endl || complete || Tested || New added
|-
| QString || Complete || Untested || New added
|-
| qrand()/qsrand() || Complete || Tested || Not present
|-
| QMutex || Complete || Untested || Not present
|-
| QDateTime || Complete || Tested || New added
|}
 
The '''RandomNumberGenerator''' class was ported and we dropped a boost dependency from here.
 
{| class="wikitable"
|+
|-
! Class !! Port status !! Test status !! Documentation
|-
| RandomNumberGenerator || Complete || Tested || Unchanged
|}
 
The '''Qt X11 Extras''' was removed from Qt6. So I imported required Qt5 code in digiKam
 
{| class="wikitable"
|+
|-
! Task !! Status !! Test status !! Documentation
|-
| Removal of Qt X11 Extras || Complete || Untested || New added
|}
The dummy webwidget to temporarily replace Qt WebEngine in Qt 6.1
 
{| class="wikitable"
|+
|-
! Task !! Status !! Test status !! Documentation
|-
| Dummy webwidget || Complete || Untested || New added
|}
 
Porting of build system (CMake files)
 
{| class="wikitable"
|+
|-
! Task !! Status !! Test Status !! Documentation
|-
| Porting cmake files || Complete || Partially Tested || Updated and new added
|}
 
The following table has information on digiKam dependencies need support of Qt6
 
{| class="wikitable"
|+
|-
! Dependency !! Status !! Possible date of availibility (as of August 2021)
|-
| Qt 6.2 || Beta available || Stable 6.2 release in September 2021
|-
| KF5 || No Qt6 support, KF6 will have Qt6 support || Unknown
|-
| QtAV || No Qt6 Support || Unknown
|-
| Marble || No Qt6 Support || Unknown
|}
 
Porting '''Qt Core5Compat''' module.
 
{| class="wikitable"
|+
|-
! Qt Core5Compat class !! Port status !! Code left !! Test status !! Documentation
|-
| QRegExp || Almost complete || QRegExp::Wildcard || Partially tested || Partially Updated
|-
| QStringRef || Complete || --- || Tested || Unchanged
|-
| QTextCodec || Almost complete || JIS7 codec unsupported code || Untested || Unchanged
|-
| QXmlSimpleReader || Incomplete || --- || --- || ---
|}
 
Status of new writing appimage scripts
 
{| class="wikitable"
|+
|-
! Script !! Status !! Test status !! Documentation !! Comments
|-
| 01-build-host.sh || Partially complete || Partially Tested || New added || New Qt 6.2 cmake
|-
| 02-build-extralibs.sh || Incomplete || --- || --- || KF5 built with Qt6 unavailable
|-
| 03-build-digikam.sh || Incomplete || --- || --- || Build all dependencies first
|-
| 04-build-appimage.sh || Incomplete || --- || --- || Build all dependencies first
|}
== Contact ==
 
Feel free to get in touch
 
'''Anjani Kumar'''
 
 
Telegram: [https://t.me/anjanik012 https://t.me/anjanik012]
 
Matrix  : @anjanik012:kde.org

Latest revision as of 20:17, 20 August 2021

digiKam: Port to Qt6 on Linux

digiKam is a professional photo management software. With the release of Qt6, digiKam needs to to adapt to many new improvements made possible with the new Qt6 framework such as code readability, better classes from Qt6 and new unit tests.

Mentors

  • Gilles Caulier
  • Maik Qualmann
  • Thanh Trung Dinh

Links

Goals

  • To prepare digiKam for Qt6 stable release in future.
  • Test for regressions and fix them
  • Write new AppImage builder scripts for future Qt6 release

Community Bonding (May 18 - June 6)

We discussed the proposal again and made some strategies on the first task and how to test the new patches.The first task was to Port digiKam to Qt 5.15. This is a sophisticated task and involves a lot of sub-steps like:

  • Identifying deprecated classes and class members/functions in Qt 5.15
  • Identifying their uses in digiKam code and organizing them based on which class has most uses.
  • Porting the identified code. Sometimes trivial, sometimes needs reviews from mentors.
  • Writing new unit test if needed.
  • Running tests and check the patched code at runtime with the digiKam stable release.

We planned a safe way to introduce patches safely in the code, otherwise regressions might be introduced. Here is a list that I made of deprecated code in digiKam and sorted it according to number of usages it had.

After identifying and listing the code that needed to be patched, I proposed two methods to approach the problem:

  • We pick a source file in digiKam and make patches to it resolving all Qt deprecation warnings.
  • We pick a Qt class from our list and identify it's use in all digiKam code and patch them.

The latter was safer as dealing with a lot of Qt classes in the same file might have led to regressions which were difficult to track down.

So I started early in this time only so that I don't get stuck in the coding period. I started picking Qt classes with few usages and started porting them. These were QMap, QPrinter. I faced some difficulty but my mentor's feedback helped me a lot and was able to learn quickly. More about this period in the blog post.

Blog

https://anjani.live/posts/gsoc-community-bonding/

Coding Period (June 7 - August 16)

Week 1

I patched a lot of warnings mostly from Qt classes that had fewer warnings. I also wrote a new unit test for FilterAction class. This test was related to QHash warnings. The test checked if all keys are unique in a QHash in FilterAction class. In a nutshell, there were 6693 lines of build warnings on master.With the patches on my branch these warnings reduced to 1830 lines. That’s a reduction of about 73%.

Patches

Blog

https://anjani.live/posts/gsoc21-week-1/

Week 2

Continuation of work from previous week. We also discussed about introducing STL algorithms in digiKam. Though it is huge task in its own and not related to my project so we suppressed the cppcheck warnings in report and moved on.

Patches

Blog

https://anjani.live/posts/gsoc21-week-2/

Week 3

During this week I patched the very old random number generators and qsrand()/qrand() in digiKam. As a result we were able to drop Boost::Random dependency. I also ported Qt X11 Extras module code. A very detailed report is in the blog post.

Patches

Blog

https://anjani.live/posts/gsoc21-week-3/

Week 4

In this week, digiKam was fully ported to Qt 5.15. We also started discussion on now introducing Qt6 this week. I tried building it for the first time with Qt6, it failed(no surprises here!). We ran into a problem that digiKam depends on Qt WebEngine which would only be stable in Qt 6.2 in September. We discussed about possible solutions. I tried building the alpha Qt 6.2 but it doesn't build.

Patches

Week 5

I found the solution to problem from last week. Gilles also helped me to get started. This week I worked on porting the build system to Qt6. digiKam is huge and we have successfully branched the build process if no web module is found. A more detailed report is in the blog.

Patches

Blog

https://anjani.live/posts/gsoc21-week-5/

Week 6

This week our goal was to port the build system in such a way that it can detect a Qt installation 5/6 and adjust accordingly. Our goal was to preserve the functionality of current Qt5 pipelines and tests. We used cmake variables and patched hardcoded Qt versions in the cmake with dynamically set variables enabling cmake configuration with both Qt5 and Qt6.

Patches

and many more can be found in the work branch.

Blog

https://anjani.live/posts/gsoc21-week-6/

Week 7

This week I worked on building digiKam with Qt6. To do this, I had to build KF5 components with Qt6 first as they are currently built with Qt5 which was a problem. I built a few modules with Qt6 but it was taking some time. If I had more time in my hands I could have completed building all required modules but we decided that we can do this later and move to work on the next task.

Now I had to port Core5Compat module code to Qt6 Core code. I have explained all the work in detail in the blog post.

Patches

Blog

https://anjani.live/posts/gsoc21-week-7/

Week 8

Most of this week's work was debugging the regression in Porting QRegExp to QRegularExpression in advancedrename tool. The regression was caught by advancedrename_utest. The regression was fixed by patching the advancedrename digiKam API itself. I have explained the regression and my process of fixing in the blog post so do refer that.

Another patch was the porting of QTextCodec class. It was trivial. I had to leave two instances because of no clear alternatives were available. These are:

For the time being, we will use Core5Compat module to keep this code working.

Patches

Blog

https://anjani.live/posts/gsoc21-week8/

Week 9

This week, I ported the remaining QRegExp uses in digiKam. There was another regression detected this week as well in class cameranamehelper. The cause was not because of my mistake. We think that it is probably a bug in Qt. This regex pattern "^(ptp|normal|mtp)(\\s+mode)?$" was failing to give an exact match with QRegularExperssion class in case insensitive mode. I found a way to make it work by using a different construction style. The blog post has detailed information.

Patches

Blog

https://anjani.live/posts/gsoc21-week9-10/

Week 10

In the final week of the coding period, I worked on the appimage builder scripts. There are 4 scripts and 4' helper scripts to build appimages. The 4 main scripts are:

  1. Build host (Builds Qt)
  2. Build extra libs (Builds KF5)
  3. Build digikam
  4. Build appimage

Because earlier we had decided to leave building KF5 with Qt6 for later, I could only work on the 1st script for now. My task was to patch the script so that it can build Qt 6.2.0-beta2 on Mageia 7.1. The script is yet to be tested fully.

Patches

Blog

https://anjani.live/posts/gsoc21-week9-10/

Final Status

The following table contains the state of porting process to Qt 5.15 on which I worked on. Please refer to above sections on links to these patches.

Qt Class Port status Test status Documentation
QMap Complete Tested Updated
QProcess Complete Tested Not present
QHash Complete Tested Updated
QMatrix Complete Tested Updated
QSet Complete Untested Not present
QButtonGroup Complete Untested Not present
QWheelEvent Complete Untested Not present
QLabel Complete Tested Unchanged
QFlag Complete Tested Not present
QTimeLine Complete Untested Not present
QTabletEvent Complete Tested Not present
QPrinter Complete Tested Not present
QTextStream::endl complete Tested New added
QString Complete Untested New added
qrand()/qsrand() Complete Tested Not present
QMutex Complete Untested Not present
QDateTime Complete Tested New added

The RandomNumberGenerator class was ported and we dropped a boost dependency from here.

Class Port status Test status Documentation
RandomNumberGenerator Complete Tested Unchanged

The Qt X11 Extras was removed from Qt6. So I imported required Qt5 code in digiKam

Task Status Test status Documentation
Removal of Qt X11 Extras Complete Untested New added

The dummy webwidget to temporarily replace Qt WebEngine in Qt 6.1

Task Status Test status Documentation
Dummy webwidget Complete Untested New added

Porting of build system (CMake files)

Task Status Test Status Documentation
Porting cmake files Complete Partially Tested Updated and new added

The following table has information on digiKam dependencies need support of Qt6

Dependency Status Possible date of availibility (as of August 2021)
Qt 6.2 Beta available Stable 6.2 release in September 2021
KF5 No Qt6 support, KF6 will have Qt6 support Unknown
QtAV No Qt6 Support Unknown
Marble No Qt6 Support Unknown

Porting Qt Core5Compat module.

Qt Core5Compat class Port status Code left Test status Documentation
QRegExp Almost complete QRegExp::Wildcard Partially tested Partially Updated
QStringRef Complete --- Tested Unchanged
QTextCodec Almost complete JIS7 codec unsupported code Untested Unchanged
QXmlSimpleReader Incomplete --- --- ---

Status of new writing appimage scripts

Script Status Test status Documentation Comments
01-build-host.sh Partially complete Partially Tested New added New Qt 6.2 cmake
02-build-extralibs.sh Incomplete --- --- KF5 built with Qt6 unavailable
03-build-digikam.sh Incomplete --- --- Build all dependencies first
04-build-appimage.sh Incomplete --- --- Build all dependencies first

Contact

Feel free to get in touch

Anjani Kumar

Email  : [email protected]

Telegram: https://t.me/anjanik012

Matrix  : @anjanik012:kde.org