Frameworks/Epics/Splitting kdelibs: Difference between revisions
khtml is tier 4 according to the maintainers list |
|||
(238 intermediate revisions by 24 users not shown) | |||
Line 1: | Line 1: | ||
== kdelibs splitting epic == | == kdelibs splitting epic == | ||
=== Important Forewords === | |||
If you are working on splitting a framework, make sure to consult [[Frameworks/Epics/Splitting_kdelibs/Common_Solutions|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 [[Frameworks/Policies|KDE Frameworks Policies]], it will also need to follow this [[Frameworks/Epics/Splitting_kdelibs#Policies|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 == | == Existing frameworks == | ||
Definition of done: | Definition of done: | ||
* No dependency on kdeui | * No dependency on kde4support, kdecore, kdeui, kio, kparts... | ||
* Modularized CMakeLists.txt | * All unused dependencies are removed | ||
* Follows the policy on directory organization | * Tier1 modules depend only on Qt modules | ||
* Unit tested | * 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 [[Frameworks/Strategy_and_Policies#Framework_directory_structure|policy on directory organization]] | |||
* [[Frameworks/Strategy_and_Policies#Frameworks_have_automatic_unit_tests|Unit tested]] | |||
* 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) | |||
Line 22: | Line 42: | ||
{{FrameworkDone|itemmodels|Tier 1|Functional|Stephen Kelly|}} | {{FrameworkDone|itemmodels|Tier 1|Functional|Stephen Kelly|}} | ||
{{ | {{FrameworkDone|kdbusaddons|Tier 1|Functional|Kevin Ottens|}} | ||
{{FrameworkDone|kplotting|Tier 1|Functional|Benjamin Port|}} | |||
{{FrameworkDone|solid|Tier 1|Integration|Àlex Fiestas|}} | |||
{{FrameworkDone|threadweaver|Tier 1|Functional|Mirko Boehm|}} | |||
{{FrameworkDone|kauth|Tier 2|Integration|Dario Freddi|}} | |||
{{FrameworkDone|kcoreaddons|Tier 1|Functional|Romain Perier/David Faure|}} | |||
{{FrameworkDone|kwindowsystem|Tier 1|Integration|Martin Graesslin|}} | |||
{{FrameworkDone|karchive|Tier 1|Functional|Mario Bensi|}} | |||
{{FrameworkDone|kconfig|Tier 1|Functional|David Faure|Contains KConfigGui + KConfigCore}} | |||
{{FrameworkDone|kidletime|Tier 1|Integration|Dario Freddi|}} | |||
{{FrameworkDone|kservice|Tier 3|Solution|David Faure|in staging, tier 3 because of ki18n, could be tier2 otherwise}} | |||
{{FrameworkDone|itemviews|Tier 1|Functional|Aurélien Gâteau|}} | |||
{{FrameworkDone|kguiaddons|Tier 1|Functional|Martin Klapetek|}} | |||
{{FrameworkDone|kjobwidgets|Tier 2|Functional|Kevin Ottens|}} | |||
{{FrameworkDone|kjs|Tier 1|Functional|David Faure|}} | |||
{{FrameworkDone|ki18n|Tier 2|Functional|Chusslove Illich|}} | |||
{{FrameworkDone|kemoticons|Tier 3|Solution|David Gil|}} | |||
{{FrameworkDone|xmlgui|Tier 3|Integration|Àlex Fiestas|}} | |||
{{FrameworkDone|sonnet|Tier 1|Functional|Martin Sandsmark|Contains SonnetCore + SonnetUi}} | |||
{{FrameworkDone|frameworkintegration|Tier 4|N/A|Kevin Ottens|}} | |||
{{FrameworkDone|kio|Tier 3|Solution|David Faure|incomplete, will contain KIOCore + KIOWidgets}} | |||
{{FrameworkDone|knotifications|Tier 2|Integration|Aleix Pol|}} | |||
{{FrameworkDone|kde4support|Tier 4|N/A|Kevin Ottens|}} | |||
{{FrameworkDone|kde4attic|Tier 4|N/A|Kevin Ottens|It's gone, dismantled}} | |||
{{FrameworkDone|kcodecs|Tier 1|Functional|Stephen Kelly|}} | |||
{{FrameworkDone|kwidgetsaddons|Tier 1|Functional|Stephen Kelly|}} | |||
{{FrameworkDone|kcompletion|Tier 2|Functional|Aleix Pol|}} | |||
{{FrameworkDone|kconfigwidgets|Tier 3|Functional|Aurélien Gâteau|}} | |||
{{FrameworkDone|kcrash|Tier 2|Solution|Martin Klapetek|}} | |||
{{FrameworkDone|kdoctools|Tier 2|Solution|Aleix Pol|}} | |||
{{FrameworkDone|kiconthemes|Tier 3|Solution|Àlex Fiestas|kpixmapsequence moved to kwidgetaddons}} | |||
{{FrameworkDone|kinterprocesswindowing|Splitted in kwidgetsaddons and kwindowsystem|Integration|Aurélien Gâteau|}} | |||
{{FrameworkDone|ktextwidgets|Tier 3|Functional|Martin Klapetek|}} | |||
{{ | {{FrameworkDone|kunitconversion|Tier 3|Functional|Aleix Pol|}} | ||
{{ | {{FrameworkDone|kwallet|Tier 2|Integration|Valentin Rusu|}} | ||
{{ | {{FrameworkDone|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 | |||
* [[Plasma/PortingTolibplasma2|Porting notes]] | |||
* [[Plasma/libplasma2|Various identified issue/improvements to be made]] | |||
}} | |||
{{ | {{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}} | |||
{{FrameworkDone|kjsembed|Tier 3|?|Aleix Pol|}} | |||
{{FrameworkDone|knewstuff|Tier 3|?|Jeremy Whiting|Right now in knewstuff}} | |||
{{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 61: | Line 169: | ||
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): | ||
* | * ... | ||
* | 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. |
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 |
|
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 |
|
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.