Hello,

I got pulled into a discussion elsewhere, which led to a number of thoughts I 
thought I'd best share here in hope they'll lead to something constructive.

This mostly centres around building on platforms where it is less usual to 
install resources that can be shared (libraries, config/interface files etc) in 
such a way that they can indeed be shared among different applications, 
modules, kparts, etc. The main platforms concerned are of course OS X with its 
possibility to provide all-encompassing, standalone app bundles and MS Windows 
where each application tends to install all stuff it needs in its own 
directory. If you forget about a few sexy details, those 2 approaches are 
really almost identical. Both platforms also share the fact that QStandardPaths 
returns very different things.

The crux is in the "less usual". I hesitate even to use "not the preferred way" 
because there are sufficient exceptions - *in addition to* software 
distribution systems (with or without binary packages) that aim to provide an 
environment for FOSS/cross-platform software that's as close as possible to the 
principal universe in which that software evolved (i.e. Linux). To name but a 
few: Cygwin, HomeBrew, MacPorts, Fink, pkgsrc, Gentoo Prefix.

I'll be focusing mostly on OS X which is still my OS of choice, and MacPorts 
which is the distribution/packaging/build system I use to build, install, 
maintain (etc) software that isn't provided by Apple or linked to intricately 
to the system to meddle with. Since I also use Linux I vastly prefer software 
to function as much as possible the same way on both platforms, with as full a 
feature set as possible and things installed in locations that are as similar 
as possible. Example: I use Kontact/Kmail on both platforms; I have a hard time 
imagining bundling all of KDE PIM in a single app bundle (that'd be running its 
own private DBus daemon?) without losing crucial features or requiring 
significant hacking of the code.

Let me repeat something I've said before but that I think hasn't been picked up 
too well. OS X has various mechanisms for installing applications. The 
"drag-an-icon" metaphor is probably the most visible and interesting (to people 
who're used to other platforms and not actually OS X users themselves), it can 
be very convenient even to seasoned power users, etc. But it is just one of the 
ways an app can be installed. Apple's own applications do not use that approach 
by and large. Those that are not shipped through the App Store mostly use a 
traditional installer instead. It isn't particularly difficult to create 
packages for the Installer.app either - in fact, MacPorts command-line utility 
has a command to create a disk image (DMG) containing an installer for either a 
single package or for a package with all its dependencies.

Also, do not think that the standard, unpatched KDE build process leads to 
anything other than app bundles on OS X. It's the contrary, rather; you need to 
invoke (the inaptly named) ecm_mark_nongui_executable in order to build a 
target as a regular executable. It is true that the app bundles you get with 
the current build system are not standalone in the sense that they contain 
everything the application depends on except for the system libraries. But they 
behave exactly like standalone app bundles; with the only exception that's not 
possible is to copy them to and run them on a different host that doesn't have 
the dependencies installed where they're expected. But the same goes for many 
apps from Apple; if for some reason you uninstall iTunes from a Mac (or really 
bork the entire install), you cannot reinstall it simply by copying iTunes.app 
from another Mac.
That exception aside, unconcerned users really won't see the difference - and 
with an installer they don't even have to wonder where they're going to put an 
application. And to be honest, most really "n00b" users I've had to deal with 
actually have difficulties going beyond the download of a dmg. It's very common 
to come across systems that have numerous copies of those disk images, but that 
don't have the application installed because the user never caught on to how to 
proceed after the download.

Hopping back on my thought train, I'd even go so far to say that if you (in 
general, not limited to KDE) really care about user convenience in the context 
of distributed, free software development, you're going to aim for an approach 
in which it becomes both easier and more urgent to provide (or rather, support) 
up-to-date versions of the KF5 frameworks. When everything is bundled, it's 
easy to become sloppy and rebundle a new binary package only once in a while. 
If however you aim to provide the frameworks (and select other libraries) in a 
centralised fashion it becomes feasible to provide a (semi)automated updating 
mechanism, and all installed applications benefit from the latest bug and 
security fixes (and package maintainers gain an incentive to keep their 
packages up to date).

Question: don't frameworks like Sonnet have their own set of user-preferences 
which are supposed to apply to all applications using those frameworks? That 
would be impossible if you follow Apple's App Store guidelines for completely 
standalone appbundles.

All this to make a bit of a passionate request: whatever is decided for the 
"official" way to build things (on OS X), please consider the use case for a 
more traditional way of building and ensure that it remains possible to select 
that through a CMake option instead of through what would certainly become an 
intangible forest of patches. Also see Marko's reaction below.

In that context, it would probably be a very good idea to reimplement parts of 
the build system so that install locations are determined from the actual paths 
returned by QSP rather than more or less hardwired.

That should prevent a lot of platform-specific hacking in CMake files and make 
it a lot easier to maintain a system that can cater for both the "linuxy" 
install layout and a more platform-native way of installing things. I'm not 
very familiar with the K*5 build system intrinsics, but I reckon it sh/could 
involve calling a utility like qtpaths from a central ECM module
Ideally that would probably be a utility that gets built when installing ECM. 
As long as there's hope I'll continue to clamour for as official a solution as 
possible to chose between a "native" or a "linuxy" way of installing things, 
and that could well mean that that utility should be written from scratch (it 
could also be useful to pass in the install prefix).
In any event I think the build system and the runtime cannot but agree one 
where things are supposed to be found. Supporting an XDG-compliant ("linuxy") 
install layout will require patching QSP on platforms where this is necessary 
(an effort that won't have to be supported by KDE of course), so using QSP to 
determine install locations where possible would solve part of the problem of 
introducing platform-specific code in the CMake files.

I hope all this wasn't too vague ... and an open door for most ;)

Cheers,
René

_______________________________________________
Kde-buildsystem mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kde-buildsystem

Reply via email to