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

From KDE Community Wiki
mNo edit summary
Line 67: Line 67:
Branches:
Branches:


'''qt4''' - old Qt4-based master moved there, always stable
'''kdb''' - official Qt 5 branch, all platforms, always stable (once we port it)


'''kdb''' - official Qt 5 branch, all platforms, always stable
'''qt4''' - old Qt4-based master moved there, stable but won't be maintained


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

Revision as of 20:23, 4 May 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 (see Scripting::*, KRScriptConstants, KRScriptDraw, KRScriptDebug)
    2. Remove then unused calligradb lib and parts of KexiDB lib
  5. Improve Kexi stability after porting
  6. -- Kexi 3.0 release here --
  7. Add tests and/or examples to KReport, make it easier to understand as a framework
    1. Port some code from Kexi Reports (e.g. KexiReportView [1]) to KReport
  8. Make KReport lib dependent on KDb and remove code/API that becomes redundant (e.g. KoReportData)
  9. Add a new scripting module
  10. 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: [2], 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:

kdb - official Qt 5 branch, all platforms, always stable (once we port it)

qt4 - old Qt4-based master moved there, stable but won't be maintained

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

Porting scripts usage status

These porting scripts from the kf5 dir of the kde:kde-dev-scripts repo would be applied.
Legend: - = not run, + = run, N = not applicable

KDb | KProperty | KReport | Kexi | script-name
- - + - 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
N N N - convert-kdebug-with-argument.sh
- - N - 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
- - - + frameworks/plasma-framework/src/tools/port-cmake-style.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