Getting ecm files from the ECM package

Alexander Neundorf neundorf at kde.org
Fri Nov 1 09:46:46 UTC 2013


On Thursday 31 October 2013, David Faure wrote:
> On Thursday 31 October 2013 17:54:06 Alexander Neundorf wrote:
> > IOW, those three files exist only for KF5, and no other reason.
> 
> This contradicts "use KDECMakeSettings.cmake in gammaray if you want
> automatic RPATH handling" as you told me some time ago.
> 
> In other words, these things are convenience on top of cmake, not only
> useful for KF5.


Let me explain how I see things.
Up to KDE4, things were simple.
There was the kdelibs module. It was released together, dependencies within it 
were ok, it was hosted on KDE infrastructure and developed by KDE people.
Software using that used "KDE".

With frameworks things are becoming in my view very different.
Every library will be in a separate repository.
What makes e.g. karchive a KF5 tier1 library and not just some library using 
Qt, like e.g. Qwt ?
There is no clear *technical* difference.
There are let's say organizational differences: it is hosted on KDE servers, 
it is developed by people with KDE accounts, it is (not quite sure about this) 
released together with a whole bunch of other libraries, it follows KDE best 
practices and it has the stamp "KF5" on it, given by people with KDE accounts.
So, as you say that e.g. KDECMakeSettings.cmake can be used also by "non-KF5" 
software, the same is true for every tier1 library. We could ask for a lot if 
not all tier1 libraries why aren't they upstreamed into Qt ?


What does e-c-m contain today: a bunch of find-modules and generic macros, 
which are useful for some packages, wether they use Qt or not.
Additionally, KDEInstallDirs.cmake, KDECMakeSettings.cmake and 
KDECompilerSettings.cmake.
As a fact, all KF5 frameworks on these three files, including the tier1 libs.
All KF5 software could technically also be compiled and linked without these 
three files.
So why does everything use them ?
They are used to follow "KDE best practices".

KDEInstallDirs.cmake is used to provide a common and complete set of install 
location variables, to make sure KDE developers find a common cmake 
environment when looking at other KDE projects. Projects which don't have the 
requirement that it should be easy for KDE developers to work on them have no 
need to use this file. They can use GNUInstallDirs.cmake, or even hardcode 
install locations. This would not be ok for KDE software, since we have 
requirements for portability etc., but it may be ok for other projects.

The same for KDECompilerSettings.cmake. It is used to make KDE software build 
in all platforms KDE supports, with the compiler features needed by KDE.

KDECMakeSettings.cmake is there to provide a set of cmake settings, again to 
give KDE developers a common setup where they don't have to care much about 
other things themselves.

So all three files are there for the convenience of KDE developers, to make 
the projects follow KDE requirements and best practices, and their content is 
governed by what is considered useful by KDE developers for KDE (e.g. at work 
we need different RPATH settings).


So here's my ideal view of the world, which clashes with the rule that there 
must not be a tier0:

Upstream: Qt and CMake

ECM: hosted somewhere, e.g. on github, contains find-modules and generic 
macros, not only KDE-developers contribute, it is released frequently, e.g. 
monthly. Required by packages which need some of the contained files, i.e. not 
necessarily used by all KF5 or all KDE packages, but OTOH used also by non-KDE 
and non-Qt packages. [1]

[For the packages below, development is governed exclusively by KDE 
developers, which is not the case for the packages above.]

tier0: kf5-build-files (or some name): Stephens KF5Config.cmake, additionally 
containing the three KDE*.cmake files mentioned above. Hosted by KDE. All KF5 
packages, including tier1, depend on it for building. Released coordinated 
with the rest of KF5.
So I agree with Stephen that it is the correct thing to have the KF5 umbrella 
cmake file in a separate package. But I would have made that tier0.

tier1, 2, 3: they all depend at buildtime on tier0. Beside that, everything as 
we know it.


To get back to Gammaray: with this view, there is no contradiction. By using 
KDECMakeSettings.cmake, Gammaray would simply be a user of the tier0 KF5 
framework.

Alex


[1] Why not merge that into CMake ? For quicker releases, and even easier 
contributing. Also Bill once said that in hindsight he would have prefered if 
cmake would not ship any find-modules itself at all. So one could imagine that 
cmake would come without any find-modules in the future, and all find-modules 
would come from a separate package, e.g. ECM.
This would make cmake the core tool, and ECM its "standard library".


More information about the Kde-frameworks-devel mailing list