Kexi/Porting to Qt&KF 5: Difference between revisions

From KDE Community Wiki
No edit summary
Line 2: Line 2:


The grand plan:
The grand plan:
# [75%, builds, example runs] Port [[#Predicate|Predicate]]↓ lib to Qt 5
# [75%, builds, example runs] Port <strike>Predicate</strike>[[#KDb|KDb]]&darr; lib to Qt 5
# [97%] Move [[#koproperty|koproperty]]&darr; lib to a separate kproperty repo, make it Qt-only and port to Qt5
# [97%] Move koproperty lib from calligra to a separate [[#KProperty]]&darr; repo, make it Qt-only and port to Qt5
# [30%] Move [[#koreport|koreport]]&darr; lib to a separate kreport repo, make it Qt-only and port to Qt 5
# [30%] Move koreport lib from calligra to a separate [[#KReport]]&darr; repo, make it Qt-only and port to Qt 5
## Remove scripting or port scripting?
## Remove scripting or port scripting?
# Port Kexi (without KexiDB/calligradb, reporting, KoReport) to Qt 5 and port Kexi to Predicate and the new koproperty/koreport
# Port Kexi (without KexiDB/calligradb, reporting, koproperty, koreport) to Qt 5 and port Kexi to KDb and the new kproperty/kreport
## Reimplement report scripting using a simple solution to keep backward compatibility with Kexi 2
## Reimplement report scripting using a simple solution to keep backward compatibility with Kexi 2
## Remove then unused calligradb lib and parts of KexiDB lib
## Remove then unused calligradb lib and parts of KexiDB lib
# Improve Kexi stability after porting
# Improve Kexi stability after porting
# '''-- Kexi 3.0 release here --'''
# '''-- Kexi 3.0 release here --'''
# Make koreport lib dependent on Predicate and remove code/API that becomes redundant (e.g. KoReportData)
# Make KReport lib dependent on KDb and remove code/API that becomes redundant (e.g. KoReportData)
# Add a new [[Kexi/Plugins/Scripts|scripting module]]
# Add a new [[Kexi/Plugins/Scripts|scripting module]]
# Use the module in Kexi Reports too, keeping backward compatibility with Kexi 2 scripting (add unit tests before porting to be very sure that compatibility is kept)
# Use the module in Kexi Reports too, keeping backward compatibility with Kexi 2 scripting (add unit tests before porting to be very sure that compatibility is kept)
Line 24: Line 24:
*Use [http://quickgit.kde.org/?p=kde-dev-scripts.git kde-dev-scripts.git] porting scripts, in particular
*Use [http://quickgit.kde.org/?p=kde-dev-scripts.git kde-dev-scripts.git] porting scripts, in particular
**[http://kfunk.org/2015/01/11/new-porting-helper-convert-to-cmake-automoc-pl convert-to-cmake-automoc.pl]
**[http://kfunk.org/2015/01/11/new-porting-helper-convert-to-cmake-automoc-pl convert-to-cmake-automoc.pl]
*Libs that are separate repos should use the framework template (see Links) and be ported to this layout (for now it's just predicate, koproperty, koreport).
*Libs that are separate repos should use the framework template (see Links) and be ported to this layout (for now it's just kdb, kproperty, kreport).


TODO...
TODO...
Line 52: Line 52:
*In particular, the kdesrc-build will install extra CMake Modules: [https://community.kde.org/Frameworks/Building/Details#Extra_CMake_Modules], which is needed to make our software able to find the KF5 components at build time.
*In particular, the kdesrc-build will install extra CMake Modules: [https://community.kde.org/Frameworks/Building/Details#Extra_CMake_Modules], which is needed to make our software able to find the KF5 components at build time.


===Predicate===
===KDb===
*Download/Build/Release info &rarr; [[Predicate]].
*Download/Build/Release info &rarr; [[Predicate]].
*Our target [[Predicate/Releases|version]] is 1.0.0.
*Our target [[Predicate/Releases|version]] is 1.0.0.
Line 67: Line 67:
'''qt4''' - old Qt4-based master moved there, always stable
'''qt4''' - old Qt4-based master moved there, always stable


'''master''' - official Qt 5 branch, all platforms, always stable
'''kdb''' - official Qt 5 branch, all platforms, always stable


'''qt5-kosowicz''' - Wojtek's Qt 5/Linux
To have it build on that branch please export qt5 install dir
To have it build on that branch please export qt5 install dir
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">

Revision as of 21:53, 16 April 2015

Note

Draft. Based on notes from the Calligra 2014 Sprint. Each step leads to compiling (running?) state.
Started by jstaniek (talk) 19:06, 7 July 2014 (CET).


The grand plan:

  1. [75%, builds, example runs] Port PredicateKDb↓ lib to Qt 5
  2. [97%] Move koproperty lib from calligra to a separate #KProperty↓ repo, make it Qt-only and port to Qt5
  3. [30%] Move koreport lib from calligra to a separate #KReport↓ repo, make it Qt-only and port to Qt 5
    1. Remove scripting or port scripting?
  4. Port Kexi (without KexiDB/calligradb, reporting, koproperty, koreport) to Qt 5 and port Kexi to KDb and the new kproperty/kreport
    1. Reimplement report scripting using a simple solution to keep backward compatibility with Kexi 2
    2. Remove then unused calligradb lib and parts of KexiDB lib
  5. Improve Kexi stability after porting
  6. -- Kexi 3.0 release here --
  7. Make KReport lib dependent on KDb and remove code/API that becomes redundant (e.g. KoReportData)
  8. Add a new scripting module
  9. Use the module in Kexi Reports too, keeping backward compatibility with Kexi 2 scripting (add unit tests before porting to be very sure that compatibility is kept)

Rules

  • Kexi's port itself is kept with other Calligra apps in the framework branch. During this time master branch is frozen to avoid merge conflicts. After a successful port of all planned code, we'll be back to development in master for unstable code and calligra-3.x for 3.x stable code.
  • Use personal git scratch repos to avoid stress with buildbreaks and unnecessary BUG/review notifications
  • Synchronize with (boud's?) branch of the Qt5 port. Boud's advice: My approach is more like, run each of montel's scripts, fix twhat's wrong, then go on. It's not something that's easy to paralellize.
  • Don't run astyle on the code, it pollutes history, and astyle-kdelibs is a bit broken
  • Based on "Porting notes" below, keep porting of one aspect in one commit to simplify reviews
  • Use the reviewboard for reviews
  • Use kde-dev-scripts.git porting scripts, in particular
  • Libs that are separate repos should use the framework template (see Links) and be ported to this layout (for now it's just kdb, kproperty, kreport).

TODO...

Notes and Status

  • TODO: publish detailed checklist (in a spreadsheet?)

Dependencies

Please read all this section carefully before taking action.

  • Qt 5. Get >=5.2 stable version from your distro, not forgetting about development packages (headers). If you feel you want it, build Qt 5, but it's usually not necessary extra work.
  • CMake: version >=2.8.12+ and 3.x are both supported. Get it from your distro (recommended) or build it.
  • KDE Frameworks 5 (KF5) are needed as build-time and run-time dependencies for Calligra, Kexi and our frameworks (KProperty, etc).
  • Use the kdesrc-build tool to conveniently build KF5. Building by hand in an option if you accept extra work usually not needed for our development (see Frameworks/Building/Details).
  • There is the Adjust the paths step. For Kexi development (and Calligra in general) it's good to re-use paths that we already use, see the [[Calligra/Building#Recommended_Setup|Recommended setup of the Calligra build instructions. This means that recommendation for the kdesrc-buildrc config file is:
 source-dir /home/YOU/kde/src
 build-dir /home/YOU/kde/build
 kdedir /home/YOU/kde/inst5

Note

If you used /home/YOU/kde/inst as a dir the Calligra 2.x and other kdelibs4-based software, do not mix it with the Calligra 3.x+ and other kf5-based software, otherwise you can experience crashes or other strange behaviour. Use /home/YOU/kde/inst5 for example.


  • Speed up: before using the KF5 with kdesrc-build, edit the kf5-qt5-build-include file and comment these lines if you don't want to build the workspace, applications and KDEPIM. This way only include kf5-frameworks-build-include lefts.

include kf5-workspace-build-include include kf5-applications-build-include include kf5-kdepim-build-include

  • In particular, the kdesrc-build will install extra CMake Modules: [1], which is needed to make our software able to find the KF5 components at build time.

KDb

  • Download/Build/Release info → Predicate.
  • Our target version is 1.0.0.
  • To avoid conflicts, Qt 4 version kept for reference, has version 0.0.0.
  • Depends only on system libraries and Qt, so it's a tier 1 framework
  • Windows and Mac-specific matters.
  • Porting to Qt 5 started by Wojtek Kosowicz (Jan 2015)
  • Porting to Qt 5/Mac OS X started by Wojtek Kosowicz too (Jan 2015)
  • Directory structure reorganized according to recommendations --Jstaniek (talk) 20:59, 23 February 2015 (UTC)
  • A temporary repo: git clone kde:clones/predicate/staniek/work predicate

Branches:

qt4 - old Qt4-based master moved there, always stable

kdb - official Qt 5 branch, all platforms, always stable

To have it build on that branch please export qt5 install dir

export QTDIR=<path to your qt5 install dir, or qtbase build dir if using uninstalled>
export PATH=$QTDIR:$PATH


qt5mac-kosowicz - Wojtek's Qt 5/Mac OS X

kproperty

  • Our target version is 1.0.0 and KProperty project in Playground/Libs category of KDE projects
  • Depends on system libraries and Qt, plus minor deps on KF5WidgetsAddons/KF5GuiAddons for some editors; later we may move this dependency to a plugin (so the core would stay Qt-only)
  • Official git repo: kproperty, master branch (use: git clone kde:kproperty)
  • Directory structure reorganized according to recommendations --Jstaniek (talk) 20:59, 23 February 2015 (UTC)

kreport

  • Our target version is 1.0.0 and KReport project in Playground/Libs category of KDE projects
  • To avoid conflicts, Qt 4 version kept for reference, has version 0.0.0.
  • Depends on system libraries, Qt, and KProperty (tier 1), so it's a tier 2 framework, some deps on KF5WidgetsAddons (may be moved to a plugin so the core would stay Qt-only)
  • Official git repo: kreport, master branch (use: git clone kde:kreport)
  • Directory structure reorganized according to recommendations --Jstaniek (talk) 20:59, 23 February 2015 (UTC)
  • Deps from calligra libs (copied, renamed): KoRuler, KoUnit

Scripts usage status

These scripts from the kf5 dir of the kde:kde-dev-scripts repo would be applied.

kdb kproperty kreport script-name
- - - adapt-akonadi-includes.pl
- - - adapt_cmakelists_file.pl
- - - adapt_knewstuff3_includes.pl
- - - add_missing_kpart_include.pl
- - - clean-forward-declaration.sh
- - - clean-includes.sh
- - - cmakelists_install_vars.pl
- - - convert-kabc-to-kcontacts.pl
- - - convert-kaction.pl
- - - convert-kbuttongroup.pl
- - - convert-kcmdlineargs.pl
- - - convert-kcolordialog.pl
- - - convert-kdebug.pl
- - - convert-kdebug-with-argument.sh
- - - convert-kdialog.pl
- - - convert-kdoublenuminput.pl
- - - convert-kfiledialog.pl
- - - convert-kfontcombobox.pl
- - - convert-kicon.pl
- - - convert-kimageio.pl
- - - convert-kintnuminput.pl
- - - convert-kintspinbox.pl
- - - convert-kjob.pl
- - - convert-klineedit.pl
- - - convert-klistwidget.pl
- - - convert-klocale-formatdate.pl
- - - convert-kmd5.pl
- - - convert-kmenubar.pl
- - - convert-kmenu.pl
- - - convert-kmimetype.pl
- - - convert-kprogressdialog.pl
- - - convert-kpushbutton.pl
- - - convert-ksavefile.pl
- - - convert-ksharedptr.pl
- - - convert-kshortcut.pl
- - - convert-ksplashscreen.pl
- - - convert-kstandarddirs.pl
- - - convert-ktabwidget.pl
- - - convert-ktempdir.pl
- - - convert-ktemporaryfile.pl
- - - convert-ktextbrowser.pl
- - + convert-kurl.pl
- - - convert-kvbox.pl
- - - convert-qkdebug-to-qcdebug.sh
- - - convert-qt5.pl
- - - convert-to-cmake-automoc.pl
- - - convert-to-k4aboutdata.pl
- - - convert-to-new-signal-slot-signal.pl
- - - dnssd-to-kdnssd.sh
- - - fix-ecm-install-icons.pl
- - - fix-kcm-module-desktop-file.sh
- - - install_forwarding_headers.pl
- - - port-kauthactions.pl
- - - port_to_autogenerate_export_header.sh
- - - remove-kde4support.pl
- - - remove_virtual_prefix.pl
- - - resolve_kuit.py
- - - search-kdelibs4support-header.sh

Git surgery

(Jstaniek (talk) 09:54, 23 February 2015 (UTC)) Repos are prepared by history rewrites such as:

git filter-branch --prune-empty -f --tree-filter \
'(mkdir -p src;mv Predicate src/predicate;mv Drivers src/drivers) 2> /dev/null || true' -- HEAD

Links

Docs

Background