Hi,

While working on the update to Qt 5.6.0 I realised I should try to rekindle the 
probably controversial issue of providing a dedicated Qt5 port that will be 
optional for but preferred by the KF5 ports currently under testing.

I've tried to be as succinct as possible... I hope this is all clear enough and 
not too long; it'd be nice to get some feedback this time.

The main specific adaptation of qt5-kde is a patch to QStandardPaths that 
allows that class to return XDG-compliant locations for various settings files 
and shared resources like icons, DBus scripts, etc. That's more or less an 
unavoidable modification if we want KF5 applications to build, install and 
behave (in MacPorts) like their KDE4 counterparts did - and interact with those 
(and other, e.g. GTk/Gnome apps from the Freedesktop universe). Another 
important difference is that the install layout follows the layout used by the 
original, exclusive port:qt4-mac, because it is much closer to an XDG-compliant 
 layout.

Having 2 different ports each providing the same middleware is of course not an 
ideal solution. If things had gone as I'd liked there would now be a single 
port with a +KDE variant. Alas, that apparently wasn't to be.

Instead, I've set up my qt5-kde port to be as compatible as possible with the 
main/official port:qt5. In a nutshell: port:qt5-kde installs everything the qt5 
*meta*port does, except the QtWebEngine component which for now is provided as 
a subport because it is so costly to build (about as much as the rest). Qt5-kde 
also installs symlinks that provide access to various elements along the same 
paths as port:qt5 does (e.g. /opt/local/libexec/qt5/include -> 
/opt/local/include/qt5). With this I have been able to install the binary Qt5 
Creator package and run the application without issues.
I have implemented a PortGroup wrapper that takes care of handling most 
differences between the 2 ports by including the appropriate "payload" 
PortGroup. As a result, users can install either Qt5 port as a mostly 
transparent alternative for the other without being obliged to have both 
installed and activate either the one or the other. A preference setting is 
provided whereby ports can indicate which Qt5 flavour they prefer, which is 
what gets installed if no Qt5 port is available yet.

With these adaptions I think there is little hard reason not to admit qt5-kde : 
users who don't care about KF5 ports or have reason to run port:qt5 with its 
fewer patches and all-encompassing install prefix are served as they are now, 
while users who do want to use KF5 applications in optimal form (or use 
port:qt5-kde for some of its other specifics, like e.g. providing Qt 5.3.2 on 
OS X 10.6) also get a choice. They'll still be able to use regular ports 
depending on Qt5 - at the moment those will be built from source when 
port:qt5-kde is installed instead of port:qt5 .

I'm launching this thread to discuss ways to streamline this. For there is a 
caveat. Originally, the Qt4 and Qt5 ports installed all Qt components, so 
dependent ports could simply include the respective PortGroup which would then 
add an appropriate (path:-style) dependency. My own QtWebEngine subport, and 
now mcalhoun's complete separation into a 1-subport-per-component design make 
this less trivial (port:qt5-kde does provide the equivalent subports as stubs, 
btw).
Ports that want to depend on only the components they require (or require 
QtWebEngine, in my case) can no longer simply include the PortGroup because all 
those component subports follow a "${name}-component" naming scheme.

Addressing the qt5-kde-qtwebengine dependency issue would be simple enough for 
ports that simply continue to depend on all Qt5. A flag 
(qt5.depends_qtwebengine) can be used to add the appropriate depends_libs 
command in the qt5-kde PortGroup.
But the only way to handle this elegantly and transparently would be to provide 
a dependency procedure, where ports could do something like

{{{
set qt5.selective_dependencies yes
# set qt5.prefer_kde yes
PortGroup qt5 1.0

qt5.depends_libs qtbase qtwebengine
}}}

Each "payload" PortGroup (qt5-kde-1.0.tcl and what I've called qt5-mac-1.0.tcl 
for lack of a better name) would add the appropriate dependency statements in 
its specific implementation of the qt5.depends_libs procedure, ideally using 
the path:- style :

For port:qt5 you'd get
depends_libs-append   
path:libexec/qt5/lib/QtWebEngineCore.framework/Versions/5/QtWebEngineCore:qt5-qtwebengine

and for port:qt5-kde
depends_libs-append   
path:libexec/qt5/Library/Frameworks/QtWebEngineWidgets.framework/Versions/5/QtWebEngineWidgets:qt5-kde-qtwebengine

or
depends_libs-append   
path:libexec/qt5/libs/QtWebEngineWidgets.framework/Versions/5/QtWebEngineWidgets:qt5-kde-qtwebengine

because that path is valid too and ensures compatibility with port:qt5 even 
though if that port is installed one should never get a dependency on 
qt5-kde-qtwebengine .

I've used a comparable procedure in my KF5 PortGroup, and that works perfectly.

Of course this would have to be agreed upon between mcalhoun, me, and all 
potentially concerned port devs.

Thanks,
René

_______________________________________________
macports-dev mailing list
macports-dev@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/macports-dev

Reply via email to