Summary from Buildsystem BoF at Desktop Summit
Alexander Neundorf
neundorf at kde.org
Mon Aug 15 21:31:26 UTC 2011
Hi,
last week at Desktop Summit we had a KDE buildsystem BoF, where we discussed
the state of our buildsystem with regard to Qt5 and the KDE frameworks
modularization efforts.
The nice thing is it seems there is a small community building up around this
topic :-)
Attendees were: Marco Martin, Marcus Hanwell, Heinz Wiesinger (Slackware),
David Faure, Sebastian Kuegler, Stephen Kelly, Guillaume (yoms), Sune Vuorela,
John Layt, Volker Krause, Tobias Koenig, Alex Neundorf, Dirk Mueller, Emanuele
Taponi and Raphael Cubo da Kosta.
The following topics were discussed, details see below
1) Upstreaming stuff into cmake
2) Creating a separate project/package for not-upstreamable cmake modules
3) release tarballs
4) Superbuild
5) Required cmake version
6) "finding" "KDE frameworks"
7) (Getting rid of) kdeinit
8) Testing
9) a temporarily collapsing Sebas...
------------------------
1) Upstreaming stuff into CMake
------------------------
This came up first in the platform meeting in Randa. People developing
projects outside KDE (i.e. not depending on kdelibs), would like to use some
of the cmake macros/modules we have in kdelibs, so we try to get things
upstreamed into cmake.
Not everything is suitable for being added to cmake, for different reasons,
e.g. too specific, or nobody volunteering to maintain it in cmake.
Things which will probably be in the next cmake include:
- automoc
- improved FeatureSummary.cmake, deprecating MacroLogFeature.cmake
- a switch CMAKE_DISABLE_FIND_PACKAGE_PackageName to disable each
find_package() explicitely, deprecating MacroOptionalFindPackage.cmake
- synced most of our changes to Find-modules which exist in kdelibs and in
CMake to CMake
A full list can be found here:
http://community.kde.org/KDE_Core/Platform_11/Buildsystem/FindFilesSurvey
To make it short, most of our custom macros and our copies of existing Find-
modules in kdelibs will not be necessary anymore.
There was a discussion about kde4_add_executable()/add_library() and whether
they are necessary or not and whether they are candidates for merging into
CMake or not. David argued that if the logic contained in the macros is
reasonable, it should qualify for being merged into CMake. Me (Alex) argued
that most of the stuff in these macros adds only convenience for (lazy) KDE
developers, and will probably not be accepted.
David volunteered to make a list of features from
kde4_add_executable()/add_library() he considers suitable for merging into
CMake.
All changes requiring modifications in the CMakeLists.txt are/will be
documented here: http://techbase.kde.org/Development/ECM_SourceIncompatChanges
------------------------
2) Creating a separate project/package for not-upstreamable cmake modules
------------------------
We have around 100 or more Find-modules in kdelibs. Most of them can be also
useful to non-KDE projects and have no dependencies to KDE at all.
It is not realistic to expect that all or most of them will be merged into
CMake. For each of those module one volunteer would have to be found willing
to maintain the Find-module in CMake. I don't see this happening.
Beside that, it would also mean that we would depend always on the latest
version of cmake which already ships with some new Find-module.
So, instead, there'll be a separate project just containing custom Find-
modules, named extra-cmake-modules:
https://projects.kde.org/projects/kdesupport/extra-cmake-modules
- not only targeted on KDE, but any project using cmake as its buildsystem
- Needs a proper home page. Alex would love to use the Redmine wiki for that.
- needs out of band, frequent releases
- releases with Frameworks, but also intermediate releases possible
- Find-modules from kdelibs have been copied by Allen to extra-cmake-
modules/attic/, and need to be reviewed for coding style etc. before added to
extra-cmake-modules for real
- Stephen takes care of the releases of extra-cmake-modules
- Alex will write a guideline for how to review the modules
--------------------------------
3) Release tarballs
--------------------------------
We discussed released tarballs. With the transition to git not all packagers
were happy about how the tarballs changed, the dependencies between them etc.
Conclusions:
- release tarball layout should not change (often)
- if it does, needs documentation
- dependencies / structure *inside* tarballs don't matter for packagers
- dependency information should be available in a clear way
(FindPackageLog.txt basically, which is created automatically in the build
directory)
- dependency version information not well maintained anyway
- a web page which documents the dependencies would be nice, but it would have
to be generated automatically
- last but not least: also the Slackware packagers are ok with the new smaller
modular tarballs, as long as the points above are met.
There were no explicit actions planned beside that.
--------------------------------
4) Superbuild
--------------------------------
With the modularization the KDE modules are experiencing due to the switch to
git, and even more with the modularization of kdelibs, it becomes infeasible
to build all the git repositories manually in the right order for most (all ?)
developers.
So, a way to help build them becomes required (instead of merely convenient).
With the confirmation from the packagers that they don't have a problem with
fine-grained release source tarballs, luckily this tool is not necessary for
releases, but "only" for developers.
So we have
- kdesrc-build, a sophisticated perl script to download and build all of KDE,
including dependencies, parallelization etc.
- build-tool, a ruby script from Michael Jansen (http://gitorious.org/build-
tool), which does something similar
- and, the new kid on the block, CMake Superbuilds for KDE:
https://projects.kde.org/projects/kde/superbuild
Superbuild differs from kdesrc-build and build-tool in that it is not a
separate script, but only a set of CMakeLists.txt, which make it possible via
CMake's ExternalProject.cmake, to create "superprojects" consisting of
subprojects, i.e. our fine-grained git repositories, which can be built in one
go. Right now there exists a Superbuild CMakeLists.txt for each of our
previous KDE modules. Each of them updates from git, configures and build all
contained projects. Each contained project can be enabled/disabled using a
cmake option. Using "make UpdateAll && make package" it is possible to
download only the enabled projects and create a source tarball from them.
--------------------------------
5) Required cmake version
--------------------------------
David noted that we (KDE) are very conservative with the required CMake
version, i.e. we still depend on CMake 2.6.4, which is more than a year old.
Me (Alex) noted that this is on purpose to keep the pain for developers as
small as possible (having to update Qt from time to time is enough).
Now, with the upstreaming efforts (see 1) ), Alex is currently pushing hard to
get everything we need into the next cmake release (2.8.6), but possibly not
everything will make this deadline. Unfortunately the cmake 2.8.6 release
cycle is shorter than the previous CMake release cycles (since they were too
long).
All attendees agreed that it will be ok if the KDE frameworks branch will
require the latest released cmake version, until it has everything we need.
This means, KDE frameworks will require CMake 2.8.6 more or less as soon as
CMake 2.8.6RC1 has been released.
Later on, it may require 2.8.7 and 2.8.8.
For kdelibs probably nothing will change.
This is good news for me :-)
--------------------------------------
6) "finding" "KDE frameworks"
--------------------------------------
It was discussed how "KDE frameworks" will be found on the cmake-level.
Right now you do
find_package(KDE4)
and you get a whole set of variables containing all the information about all
libraries in kdelibs.
Does this still make sense with modular "KDE frameworks" ?
Conclusions:
- no, it doesn't
- requiring that developers add find_package(kcore), find_package(kio),
find_package(kjob) etc. is acceptable
- there won't be a KDE4 compatibility file, among others because due to the
reorganization there may not be libraries which exactly represent the
functionality contained e.g. in kio now
- maybe later on we'll have a look at the COMPONENT feature of find_package(),
maybe we can use it for something like find_package(KDEFrameworks COMPONENTS
kjob kio)
- each of the frameworks should install a Config.cmake file for itself
-----------------------------------------
7) (Getting rid of) kdeinit
-----------------------------------------
There was a discussion about what makes a KDE application different from a
non-KDE application. One thing is kdeinit, which is used to speed up load time
of applications by running a daemon (kdeinit) which is linked against a set of
shared libraries, and which dlopen()s the applications (i.e. their plugin)
instead of simply executing them normally.
- somebody (Volker ?) said that this speedup is still very much needed,
especially on slower platforms, e.g. tablets
- Dirk mentioned that at least on Linux, when building PIE executables
(position independent executables), executables can be loaded also as shared
object, and our special buildsystem magic would not be required anymore. But
this would work only on Linux, with kernels >= 2.6.10 (or so, i.e. already
since a few years).
- on Windows kdeinit is not used at all
- there was nobody there who knew exactly about the situation on OSX
- not sure about FreeBSD
Proposal: get rid of our build magic to create kdeinit modules, and simply
create PIE executables on platforms that support it (i.e. at least Linux, no
problem for Windows), keeping the advantages we have there.
-----------------------------------------
8) Testing
-----------------------------------------
We shortly discussed testing, continuous builds and nightly builds.
I hope Volker (or somebody) can write a better summary.
Volker has a prototype for easily running VM-based builds on Linux-machines,
which contribute their results to a cdash dashboard.
Marcus introduced us to cdash at home, which has a similar purpose, i.e. make it
very easy for people to contribute their machine as a continuous-build host to
a project.
It seems there is growing interest in establishing structured testing for KDE,
also highlighted by Till's talk "The limits of portability".
More details to come...
-----------------------------------------
9) A temporarily collapsing Sebas...
-----------------------------------------
Things got a bit uneasy temporarily when Sebas came close to a heart attack.
The impossible thing had happened, (no, hell did not freeze) but, instead our
David really had uttered the following words "... this is too complicated for
me."
We all were sitting there in disbelief, Sebas obviously being hit the hardest
by this unbelievable statement. Luckily, this unforeseen anomaly did not cause
any other major irritations in the time-space-continuum, and Sebas eventually
got back to normal, and we could finish our discussions ;-)
So, I hope I didn't forget anything major. If so, please correct me :-)
Alex
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-buildsystem/attachments/20110815/dd4b7490/attachment-0001.html>
More information about the Kde-buildsystem
mailing list