On Thursday May 03 2018 10:02:35 Thomas Friedrichsmeier wrote:

Hi,

I have mostly skimmed over your long email but allow me to warn you firsthand 
that I've tried to get feedback and constructive collaboration like this before 
and never got very far because the prevailing attitude is 1) don't patch Qt and 
2) be as Mac'ish as possible (without necessarily having a lot of experience 
with what that actually means).

What is often overlooked is that not all of Apple's own (and 3rd-party) 
software installs via simple DMGs, notably applications that depend on or 
provide shared resources. I would assume that iTunes still installs via an 
installer, for instance.

There are individual project efforts that manage to get a working standalone 
app bundle using an unpatched Qt and QSP. It is rather evident that this should 
be possible because Qt designed QSP for this purpose AND to allow using Qt for 
apps offered via Apple's app store. This works well enough for applications 
that don't don't depend on others and don't need DBus to advertise their 
services.

But in the end it's the KDE model itself that cannot easily (if at all) be 
adapted to desktop systems like Macs and MSWin PCs if you do not want to 
provide a central install of the shared resources including certain external 
dependencies like DBus. On Mac the "native" way to do that would be a single 
framework in /Library/Frameworks which bundles all KF5 frameworks like certain 
of Apple's frameworks contain multiple sub-frameworks, plus a corresponding 
store in /Library/Application Support where other KF5 libraries, plugins etc. 
can install their support files.
That would of course represent a huge effort that should have been started 
immediately with KF5 5.0.0 .

A couple of years into "supporting" KF5 on Mac and trying to get traction for 
it on/in MacPorts I have come to the conclusion that there just is no demand 
beyond possibly the few applications that are sufficiently self-sufficient to 
be offered "as an icon on a DMG"; Kate, probably KDevelop, Krita and possibly 
the other Calligra members and maybe a handful of others. digiKam has a Mac 
installer, apparently its target audience is expected to have enough computer 
literacy to know what to do with one of those :)

About MacPorts and official KF5 ports: unlikely to happen unless someone else 
is willing to recreate ports so you get a sensible experience with the 
unpatched Qt5 provided by the official Qt5 port (or adapt my KF5 ports 
minimally to that effect). The hurdle here is that I've never been able to 
arrive at a constructive collaboration with the Qt5 port maintainer; without 
that there will be no official alternative Qt5 port for use with KDE and we'll 
remain stuck with the need for a custom ports tree.

>1. It requires "smart" installers and uninstallers, will not work with
>plain .dmg's.
>2. Once installed, an application cannot trivially be moved, any more,
>as that would also require adjusting the symlinks.

>3. It only really works for a single centralized installation. However,
>if installing two KF5-based applications AppA and AppB to separate
>installation roots, where would - for instance - ~/Library/Application
>Support/kxmlgui5 point to? A directory inside AppA's installation
>root, or inside AppB's installation root? It cannot be both.
>
>appropriate. The drawbacks I can think of:
>1. A rather large patch

It is largish because designed with upstreamability in mind and I thin it also 
still contains echoes of earlier approaches that could be removed. A patch for 
a Qt version only to be used with KF5 code can be a lot leaner.
The stale ticket you refer to is probably the one on which it was said that the 
Qt devs are open for this kind of patch, provided it is well justified (argued) 
and it is transparent by default so that AppStore compatibility isn't 
jeopardised. My idea has always been to test and tune my patch in the wild and 
then present it again with community back-up.
There has also been an exchange with someone from the MSWin universe about 
linking this patch to to-be-developed qt.conf functionality, e.g. to replace 
the XDG_DATA_DIRS env. variable or possibly even the option to define all 
(alternative) QSP locations via qt.conf .

>2. There may be a concern about side-effects, as the behavior of Qt
>will depend on an environment variable where it did not before, with
>_potential_ interaction between separate installations.

The env. variable is not required, it was added to conform with the behaviour 
on other Unix variants but I never use it myself.
XDG_DATA_DIRS is not an env. variable that is used by other Mac software, but 
it shouldn't be that hard to find an alternative for it should that be 
necessary.

>3. Will also need some "cooperation" from the calling app in order to
>work for all installation scenarios (XDG_DATA_DIRS will have to be
>set/adjusted, and an extra setup call may be needed to request
>"Unix-behavior" from QStandardPaths).

No, you only need to set a preprocessor token or two during compilation. That 
is something that could easily be handled via the ECM.


>Not sure about the MacPorts-take on doing something like this, but for

MacPorts (and Fink, which still exists!) use a single prefix in which 
everything is installed like Gentoo Prefix or pkgsrc would do it. The goal is 
to provide the best and easiest way to run generic Unix applications as if you 
were working on a Unix workstation (wait, Macs actually are Unix workstations, 
too).
This includes interoperability with GTk/Gnome applications and anything else 
that follows the XDG/FreeDesktop standards and thus need to find certain 
resources in well-defined locations if they are to know about KF5 applications, 
and vice-versa(e.g. : open an SVG in Inkscape from a KF5 app or a text file in 
Kate from a GTk/Gnome app).

>As one drawback I can think of, handling supporting binaries, e.g. in
>"libexec" may cause a headache, although this, too should probably be
>solvable by appropriate adjustments of the installation layout or
>symlinks.

"libexec" and the Qt5/KF5 plugins directory could go into /Library/Application 
Support/KF5 for instance. I'd strongly advise against symlinks, unless they're 
all pointing to central locations. And not for libraries; the Mac linker will 
store normalised paths to shared libraries.

>As, so far, qt.conf does not affect QStandardPaths at all, however,
>such a patch would probably be rather intrusive in itself. (Also, so
>far, qt.conf only support one path per type, not a list of paths).

Patch size is not a problem at least if the patch is potentially upstreamable. 
The problem I see with qt.conf is that it is application-specific; each app 
bundle will have to provide its own copy.


>Ok, sorry for the long mail. Long story short: We need to come up with
>a solution, and it best be a solution that
>a) can be upstreamed to Qt
>b) works out for MacPorts, Homebrew, _and_ Craft.
>So does any of the approaches outlined above qualify for these
>conditions, or what else could be a viable route to take?

I've had enough time to muse over this to be sufficiently certain that my QSP 
patch would be the way to go if we're talking about upstreaming a patch to that 
class.

The alternative would be to convince Christoph Cullmann and like-minded people 
to work on a way to mould their respective approaches for building standalone 
app bundles into something that can be added to the ECM. In my eyes that could 
lead ultimately to a CMake build option that will enable a standalone app 
bundle build when building on Mac (or disable it if the default though that 
should probably be project-specific; I believe something like KDE PIM cannot be 
bundled that way for instance).
I'd be willing to participate in such an effort though mostly to guarantee that 
"linuxy builds" will continue to work because I have no interest in or use for 
standalone bundled versions myself.

As to "our own kde-mac" people: nowadays that seems to be just me ... and it's 
very likely that I will drop out too when my current Mac dies or becomes too 
slow.

R.

Reply via email to