Frameworks/Epics/Splitting kdelibs: Difference between revisions

From KDE Community Wiki
(khtml is tier 4 according to the maintainers list)
 
(187 intermediate revisions by 20 users not shown)
Line 12: Line 12:


Definition of done:
Definition of done:
* No dependency on kdeui or kdecore
* No dependency on kde4support, kdecore, kdeui, kio, kparts...
* Modularized CMakeLists.txt
* All unused dependencies are removed
* Tier1 modules depend only on Qt modules
* Library name is in CamelCase
* Modularized CMakeLists.txt [using extra-cmake-modules (ECM)]
* Installs a Config.cmake file for itself
* Installs a Config.cmake file for itself
* Does not install any Find*.cmake modules itself
* Does not install any Find*.cmake modules itself
* All Find*.cmake modules needed by the framework and used also by other frameworks have been upstreamed to extra-cmake-modules (via the kde-buildsystem mailing list) or directly to cmake (via the cmake list)
* Calls feature_summary at the end of the toplevel CMakeLists.txt (see kcoreaddons for an example)
* All Find*.cmake modules needed by the framework and used also by other frameworks have been upstreamed to extra-cmake-modules (via the kde-buildsystem mailing list) or directly to cmake (via the cmake list). To make sure of this, do not append to CMAKE_MODULE_PATH, but set it.
* Does not set EXECUTABLE_OUTPUT_PATH anymore.
* Follows the [[Frameworks/Strategy_and_Policies#Framework_directory_structure|policy on directory organization]]
* Follows the [[Frameworks/Strategy_and_Policies#Framework_directory_structure|policy on directory organization]]
* [[Frameworks/Strategy_and_Policies#Frameworks_have_automatic_unit_tests|Unit tested]]
* [[Frameworks/Strategy_and_Policies#Frameworks_have_automatic_unit_tests|Unit tested]]
* Has an appointed maintainer
* Maintains [[Frameworks/Epics/Splitting_kdelibs#Strive_for_Source_Compatibility|source compatibility over kdelibs]]
* Maintains [[Frameworks/Epics/Splitting_kdelibs#Strive_for_Source_Compatibility|source compatibility over kdelibs]]
* Does not use any Q_WS_* defines.
* Does not include config.h.
* Does not use QObject::tr() static calls, but only use QCoreApplication::translate(), tr() in a non-static way, or i18n() if the framework depends on ki18n.
* Document all dependencies in CMakeList between frameworks (example in kauth)


=== February Iteration ===


{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"
{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"
Line 35: Line 42:
{{FrameworkDone|itemmodels|Tier 1|Functional|Stephen Kelly|}}
{{FrameworkDone|itemmodels|Tier 1|Functional|Stephen Kelly|}}


{{FrameworkInProgress|kauth|Tier 1|Integration|Dario Freddi|
{{FrameworkDone|kdbusaddons|Tier 1|Functional|Kevin Ottens|}}
* Not following directory organization yet
* Wrongly named libkauth
* Unit tests?}}


{{FrameworkDone|kdbusaddons|Tier1|Functional|Kevin Ottens|}}
{{FrameworkDone|kplotting|Tier 1|Functional|Benjamin Port|}}


{{FrameworkInProgress|kplotting|Tier 1|Functional|??|
{{FrameworkDone|solid|Tier 1|Integration|Àlex Fiestas|}}
* Wrongly named libkplotting
* Unit tests?
* Maintainer missing}}


{{FrameworkInProgress|solid|Tier 1|Integration|Alex Fiestas|
{{FrameworkDone|threadweaver|Tier 1|Functional|Mirko Boehm|}}
Not following directory organization yet}}


{{FrameworkInProgress|threadweaver|Tier 1|Functional|Mirko Boehm|
{{FrameworkDone|kauth|Tier 2|Integration|Dario Freddi|}}
* Not following directory organization yet
}}


{{FrameworkInProgress|sonnet|Tier 2|Functional|Mario Fux|
{{FrameworkDone|kcoreaddons|Tier 1|Functional|Romain Perier/David Faure|}}
* Not following directory organization yet}}


{{FrameworkInProgress|kcoreaddons|Tier 1|Functional|Romain Perier|
{{FrameworkDone|kwindowsystem|Tier 1|Integration|Martin Graesslin|}}
* Not following directory organization yet
* Unit tests?
* Why is it still in staging?}}


|}
{{FrameworkDone|karchive|Tier 1|Functional|Mario Bensi|}}


=== March Iteration ===
{{FrameworkDone|kconfig|Tier 1|Functional|David Faure|Contains KConfigGui + KConfigCore}}


{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"
{{FrameworkDone|kidletime|Tier 1|Integration|Dario Freddi|}}
|- style="background: #ececec; white-space:nowrap;"
! Status
! Framework
! Tier
! Type
! width=120 | Maintainer
! Comment
|-


{{FrameworkTodo|kguiaddons|Tier 1|Functional|??|Will contain the non-QWidget based classes from kdelibs/kdeui}}
{{FrameworkDone|kservice|Tier 3|Solution|David Faure|in staging, tier 3 because of ki18n, could be tier2 otherwise}}


{{FrameworkTodo|idletime|Tier 1|Integration|Dario Freddi?|Right now in kutils/kidletime}}
{{FrameworkDone|itemviews|Tier 1|Functional|Aurélien Gâteau|}}


{{FrameworkTodo|window management|Tier 2|Integration|Martin Graesslin?|Right now in kdeui/windowmanagement}}
{{FrameworkDone|kguiaddons|Tier 1|Functional|Martin Klapetek|}}


{{FrameworkTodo|color widgets|Tier 2|Functional|??|Right now in kdeui/colors}}
{{FrameworkDone|kjobwidgets|Tier 2|Functional|Kevin Ottens|}}


{{FrameworkTodo|job widgets|Tier 2|Functional|Kevin Ottens|Right now in kdeui/jobs}}
{{FrameworkDone|kjs|Tier 1|Functional|David Faure|}}


{{FrameworkTodo|widgets|Tier 2|Functional|??|Right now in kdeui/widgets}}
{{FrameworkDone|ki18n|Tier 2|Functional|Chusslove Illich|}}


|}
{{FrameworkDone|kemoticons|Tier 3|Solution|David Gil|}}


=== April Iteration ===
{{FrameworkDone|xmlgui|Tier 3|Integration|Àlex Fiestas|}}


{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"
{{FrameworkDone|sonnet|Tier 1|Functional|Martin Sandsmark|Contains SonnetCore + SonnetUi}}
|- style="background: #ececec; white-space:nowrap;"
! Status
! Framework
! Tier
! Type
! width=120 | Maintainer
! Comment
|-


{{FrameworkInProgress|karchive|Tier 1|Functional|Mario Bensi|
{{FrameworkDone|frameworkintegration|Tier 4|N/A|Kevin Ottens|}}
* Depends on KSaveFile (see k-f-d for planned solution)
}}


{{FrameworkTodo|kconfig|Tier 2|Functional|Helio Castro?|
{{FrameworkDone|kio|Tier 3|Solution|David Faure|incomplete, will contain KIOCore + KIOWidgets}}
[[KDE_Core/Platform_11/Settings|Details on KConfig/DConf, etc.]]
}}


{{FrameworkTodo|kconfiggui|Tier 2|Functional|Helio Castro?|}}
{{FrameworkDone|knotifications|Tier 2|Integration|Aleix Pol|}}


{{FrameworkTodo|itemviews|Tier 3|Functional|Stephen Kelly?|}}
{{FrameworkDone|kde4support|Tier 4|N/A|Kevin Ottens|}}


{{FrameworkTodo|dialogs|Tier 3|Functional|??|Right now in kdeui/dialogs}}
{{FrameworkDone|kde4attic|Tier 4|N/A|Kevin Ottens|It's gone, dismantled}}


|}
{{FrameworkDone|kcodecs|Tier 1|Functional|Stephen Kelly|}}


=== May Iteration ===
{{FrameworkDone|kwidgetsaddons|Tier 1|Functional|Stephen Kelly|}}


{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"
{{FrameworkDone|kcompletion|Tier 2|Functional|Aleix Pol|}}
|- style="background: #ececec; white-space:nowrap;"
! Status
! Framework
! Tier
! Type
! width=120 | Maintainer
! Comment
|-


{{FrameworkTodo|kservice|Tier 3|Solution|??|Right now in kdecore/services}}
{{FrameworkDone|kconfigwidgets|Tier 3|Functional|Aurélien Gâteau|}}


{{FrameworkTodo|XMLGUI|Tier 3|Functional|??|Right now in kdeui/actions and kdeui/xmlgui}}
{{FrameworkDone|kcrash|Tier 2|Solution|Martin Klapetek|}}


{{FrameworkTodo|emoticons|Tier 3|Functional|??|Right now in kutils/kemoticons}}
{{FrameworkDone|kdoctools|Tier 2|Solution|Aleix Pol|}}


{{FrameworkTodo|kbookmarks|Tier ?|Functional|??|Right now in kio/bookmarks}}
{{FrameworkDone|kiconthemes|Tier 3|Solution|Àlex Fiestas|kpixmapsequence moved to kwidgetaddons}}


{{FrameworkTodo|kio-core|Tier ?|Solution|David Faure|}}
{{FrameworkDone|kinterprocesswindowing|Splitted in kwidgetsaddons and kwindowsystem|Integration|Aurélien Gâteau|}}


{{FrameworkTodo|kio-widgets|Tier ?|Solution|David Faure|}}
{{FrameworkDone|ktextwidgets|Tier 3|Functional|Martin Klapetek|}}


|}
{{FrameworkDone|kunitconversion|Tier 3|Functional|Aleix Pol|}}


=== June Iteration ===
{{FrameworkDone|kwallet|Tier 2|Integration|Valentin Rusu|}}


{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"
{{FrameworkDone|plasma-framework|Tier 3|Solution|Aaron Seigo, Marco Martin|
|- style="background: #ececec; white-space:nowrap;"
! Status
! Framework
! Tier
! Type
! width=120 | Maintainer
! Comment
|-
 
{{FrameworkInProgress|KDE Notifications Frameworks|probably tier2+3+5|Functional or integration|Sune|
* Work not really started, plan exists in Sune's head
* Will give a 'low level' collection of notifications
* Something like KNotification today
* No knotifydaemon
* Some gui thing for integration widgets as today
}}
 
{{FrameworkInProgress|libplasma2|Tier 3|Solution|Aaron Seigo, Marco Martin|
* libplasma2 already well under way
* libplasma2 already well under way
* need to identify and break out candidates that belong in lower tiers (e.g. ConfigReader -> kconfigxt++)
* need to identify and break out candidates that belong in lower tiers (e.g. ConfigReader -> kconfigxt++)
Line 174: Line 122:
}}
}}


{{FrameworkTodo|kcmutils|Tier 4|N/A|??|}}
{{FrameworkDone|kbookmarks|Tier 3|Functional|Kevin Ottens|Uses xmlgui and kconfigwidgets}}
 
{{FrameworkDone|kcmutils|Tier 4|N/A|David Edmundson|In staging}}
 
{{FrameworkDone|kprintutils|Tier 3|?|David Edmundson and Martin Klapetek|}}
 
{{FrameworkDone|kparts|Tier 3|Functional|Aleix Pol|}}
 
{{FrameworkDone|dnssd|Tier 2|Integration|Aleix Pol|Tier2 because the mDnssd backend depends on KConfig. It should probably be stripped out}}
 
{{FrameworkDone|kdeclarative|Tier 3|?|Aleix Pol|}}
 
{{FrameworkDone|kdesu|Tier 3|?|Martin Klapetek|}}
 
{{FrameworkDone|kdewebkit|Tier 3|Functional|Aleix Pol|}}
 
{{FrameworkDone|khtml|Tier 4|?|David Edmundson|Right now in khtml}}
 
{{FrameworkDone|kssl|Tier ?|?|David Faure|Right now in kio/kssl}}


{{FrameworkTodo|kparts|Tier 4|N/A|??|}}
{{FrameworkDone|kjsembed|Tier 3|?|Aleix Pol|}}


{{FrameworkInProgress|kde4support|Tier 4|N/A|David Faure|}}
{{FrameworkDone|knewstuff|Tier 3|?|Jeremy Whiting|Right now in knewstuff}}


{{FrameworkTodo|kde "consistency"|Tier 4|N/A|??|}}
{{FrameworkDone|kpty|Tier 3|?|David Edmundson}}
 
{{FrameworkDone|kross|Tier 3|?|Vishesh Handa|Right now in staging/kross - Tests failing}}
 
{{FrameworkDone|kded|Tier 3|Solution|Àlex Fiestas|}}
{{FrameworkDone|kinit|Tier 3|?|Aleix Pol|In staging}}
{{FrameworkDone|knotifyconfig|Tier 3|?|David Edmundson|In staging}}
{{FrameworkDone|kmediaplayer|Tier 3|?|Alex Merry|
* TESTS!
* Replace/augment D-Bus interface using MPRIS2?
* Above may need some new virtuals
* Default Phonon-based part.
}}


|}
|}
Line 192: Line 170:
Yet to be produced frameworks (foreseen tier and type, not set in stone):
Yet to be produced frameworks (foreseen tier and type, not set in stone):


* Tier 3
* ...
** libkdebug (Tier 3 / Functional) / Depends on the results coming from qDebug() in Qt5
 
And probably more...
And probably more...


Line 201: Line 177:


To be executed to complete the epic when all the frameworks are "done":
To be executed to complete the epic when all the frameworks are "done":
* Remove libinqt5
* Make sure it builds and runs against Qt 5.2 final
* Port to qt master (likely upcoming 5.1)
* Split into its own git module; pre-existing history will remain in the kdelibs repository and be accessible with git graft
* Split into its own git module; pre-existing history will remain in the kdelibs repository and be accessible with git graft
* Produce a script or cmake file to recreate a kdeexamples tarball out of a set of examples directory in the frameworks


== Policies ==
== Policies ==
Line 215: Line 191:
* KGlobal::charsets() -> KCharsets::charsets()
* KGlobal::charsets() -> KCharsets::charsets()
* KGlobal::dirs() -> KStandardDirs::global() (or something?)
* KGlobal::dirs() -> KStandardDirs::global() (or something?)
* KGlobal::ref() -> qApp->ref()
* KGlobal::ref() / KGlobal::deref() -> QEventLoopLocker
* KGlobal::deref() -> qApp->deref()


etc.
etc.

Latest revision as of 14:22, 9 January 2014

kdelibs splitting epic

Important Forewords

If you are working on splitting a framework, make sure to consult our list of common issues. It will give you an overview of the solutions you're supposed to use to deal with some of the dependencies.

Also, when splitting out a framework, it is part of being done to comply with the KDE Frameworks Policies, it will also need to follow this Epic Policies. Any framework in the staging area cannot move to its final place without following those policies.

And last but not least, if you create a new framework, please consider being its maintainer as well. We need people to ensure the stewardship of all the frameworks.

Existing frameworks

Definition of done:

  • No dependency on kde4support, kdecore, kdeui, kio, kparts...
  • All unused dependencies are removed
  • Tier1 modules depend only on Qt modules
  • Library name is in CamelCase
  • Modularized CMakeLists.txt [using extra-cmake-modules (ECM)]
  • Installs a Config.cmake file for itself
  • Does not install any Find*.cmake modules itself
  • Calls feature_summary at the end of the toplevel CMakeLists.txt (see kcoreaddons for an example)
  • All Find*.cmake modules needed by the framework and used also by other frameworks have been upstreamed to extra-cmake-modules (via the kde-buildsystem mailing list) or directly to cmake (via the cmake list). To make sure of this, do not append to CMAKE_MODULE_PATH, but set it.
  • Does not set EXECUTABLE_OUTPUT_PATH anymore.
  • Follows the policy on directory organization
  • Unit tested
  • Maintains source compatibility over kdelibs
  • Does not use any Q_WS_* defines.
  • Does not include config.h.
  • Does not use QObject::tr() static calls, but only use QCoreApplication::translate(), tr() in a non-static way, or i18n() if the framework depends on ki18n.
  • Document all dependencies in CMakeList between frameworks (example in kauth)


Status Framework Tier Type Maintainer Comment
DONE itemmodels Tier 1 Functional Stephen Kelly
DONE kdbusaddons Tier 1 Functional Kevin Ottens
DONE kplotting Tier 1 Functional Benjamin Port
DONE solid Tier 1 Integration Àlex Fiestas
DONE threadweaver Tier 1 Functional Mirko Boehm
DONE kauth Tier 2 Integration Dario Freddi
DONE kcoreaddons Tier 1 Functional Romain Perier/David Faure
DONE kwindowsystem Tier 1 Integration Martin Graesslin
DONE karchive Tier 1 Functional Mario Bensi
DONE kconfig Tier 1 Functional David Faure Contains KConfigGui + KConfigCore
DONE kidletime Tier 1 Integration Dario Freddi
DONE kservice Tier 3 Solution David Faure in staging, tier 3 because of ki18n, could be tier2 otherwise
DONE itemviews Tier 1 Functional Aurélien Gâteau
DONE kguiaddons Tier 1 Functional Martin Klapetek
DONE kjobwidgets Tier 2 Functional Kevin Ottens
DONE kjs Tier 1 Functional David Faure
DONE ki18n Tier 2 Functional Chusslove Illich
DONE kemoticons Tier 3 Solution David Gil
DONE xmlgui Tier 3 Integration Àlex Fiestas
DONE sonnet Tier 1 Functional Martin Sandsmark Contains SonnetCore + SonnetUi
DONE frameworkintegration Tier 4 N/A Kevin Ottens
DONE kio Tier 3 Solution David Faure incomplete, will contain KIOCore + KIOWidgets
DONE knotifications Tier 2 Integration Aleix Pol
DONE kde4support Tier 4 N/A Kevin Ottens
DONE kde4attic Tier 4 N/A Kevin Ottens It's gone, dismantled
DONE kcodecs Tier 1 Functional Stephen Kelly
DONE kwidgetsaddons Tier 1 Functional Stephen Kelly
DONE kcompletion Tier 2 Functional Aleix Pol
DONE kconfigwidgets Tier 3 Functional Aurélien Gâteau
DONE kcrash Tier 2 Solution Martin Klapetek
DONE kdoctools Tier 2 Solution Aleix Pol
DONE kiconthemes Tier 3 Solution Àlex Fiestas kpixmapsequence moved to kwidgetaddons
DONE kinterprocesswindowing Splitted in kwidgetsaddons and kwindowsystem Integration Aurélien Gâteau
DONE ktextwidgets Tier 3 Functional Martin Klapetek
DONE kunitconversion Tier 3 Functional Aleix Pol
DONE kwallet Tier 2 Integration Valentin Rusu
DONE plasma-framework Tier 3 Solution Aaron Seigo, Marco Martin
  • libplasma2 already well under way
  • need to identify and break out candidates that belong in lower tiers (e.g. ConfigReader -> kconfigxt++)
  • QGraphicsView and QML libraries
  • Eventually the runtime bits from kde-runtime and the Plasma QML pieces
  • Source compat is priority, but more relaxed than the rest of Frameworks as QML destroys any realistic possibility of that
  • Porting notes
  • Various identified issue/improvements to be made


DONE kbookmarks Tier 3 Functional Kevin Ottens Uses xmlgui and kconfigwidgets
DONE kcmutils Tier 4 N/A David Edmundson In staging
DONE kprintutils Tier 3 ? David Edmundson and Martin Klapetek
DONE kparts Tier 3 Functional Aleix Pol
DONE dnssd Tier 2 Integration Aleix Pol Tier2 because the mDnssd backend depends on KConfig. It should probably be stripped out
DONE kdeclarative Tier 3 ? Aleix Pol
DONE kdesu Tier 3 ? Martin Klapetek
DONE kdewebkit Tier 3 Functional Aleix Pol
DONE khtml Tier 4 ? David Edmundson Right now in khtml
DONE kssl Tier ? ? David Faure Right now in kio/kssl
DONE kjsembed Tier 3 ? Aleix Pol
DONE knewstuff Tier 3 ? Jeremy Whiting Right now in knewstuff
DONE kpty Tier 3 ? David Edmundson {{{5}}}
DONE kross Tier 3 ? Vishesh Handa Right now in staging/kross - Tests failing
DONE kded Tier 3 Solution Àlex Fiestas
DONE kinit Tier 3 ? Aleix Pol In staging
DONE knotifyconfig Tier 3 ? David Edmundson In staging
DONE kmediaplayer Tier 3 ? Alex Merry
  • TESTS!
  • Replace/augment D-Bus interface using MPRIS2?
  • Above may need some new virtuals
  • Default Phonon-based part.


Backlog

For reference, find the class by class analysis produced during Platform11 on the kdelibs dependencies page

This list is non-final, hence why it is not integrated in the table above, when the scope of a lib gets defined and worked on, it is removed from this list and go in the table above.

Yet to be produced frameworks (foreseen tier and type, not set in stone):

  • ...

And probably more...


Finalization tasks

To be executed to complete the epic when all the frameworks are "done":

  • Make sure it builds and runs against Qt 5.2 final
  • Split into its own git module; pre-existing history will remain in the kdelibs repository and be accessible with git graft
  • Produce a script or cmake file to recreate a kdeexamples tarball out of a set of examples directory in the frameworks

Policies

Strive for Source Compatibility

Avoid removing API from the frameworks branch, even if it is replaced or deprecated. Prefer to implement the old API in terms of the new API.

In some cases this is very easy. For example, many APIs in KGlobal will be replaced as part of the frameworks effort.

  • KGlobal::charsets() -> KCharsets::charsets()
  • KGlobal::dirs() -> KStandardDirs::global() (or something?)
  • KGlobal::ref() / KGlobal::deref() -> QEventLoopLocker

etc.

Removing this API from KGlobal is not necessary in most cases, and it introduces a porting burden which is best avoided.

There is unlikely to be a 1:1 mapping of old API to new API in every case, so how to implement the old API may not always be obvious. However, attempting to ensure that the older API remains useful should be at the front of our efforts and standards in the frameworks branch.

Binary compatibility policy relaxed

During the execution of this epic, the binary compatibility contraints from the global policy list is lifted.