Paths to internal executables (c.f. libexec) hard-coded

Volker Krause vkrause at kde.org
Wed Aug 26 11:40:20 UTC 2015


On Wednesday 26 August 2015 13:15:15 Kevin Funk wrote:
> Heya,
> 
> This is problem on Windows because the *final* installation location is not
> known at compile-time (obviously software is installed via installers, users
> can pick up the installation prefix). Of course this also limits the
> relocateability on other platforms, so it's not just a Windows issue per
> se.
> 
> I've found this, which describes the issue in detail:
>   https://www.mail-archive.com/kde-frameworks-devel@kde.org/msg01833.html
> 
> Consider this code (kio.git):
>    const QLatin1String libExecDir(CMAKE_INSTALL_FULL_LIBEXECDIR_KF5);
>    const QString kioslaveExecutable =
>      QStandardPaths::findExecutable("kioslave", {libExecDir});
> 
> Similar code exists in other frameworks.
> 
> Problem:
> - Hard-coding the install path is a no-go (for sure on Windows)
> 
> How can we solve this?
> 
> Proposals:
> - Generic solution:
>   - Add new API such as KSomeFittingClass::libexecPaths()
>     which returns a list of candidates based on the platform
>   - Then just do:
>      `QSP::findExecutable("myexe", KSomeFittingClass::libexecPaths())`
> - Windows solution only (also less pretty):
>   - In every place where CMAKE_INSTALL_FULL_LIBEXECDIR_KF5 is used:
>   - Replace install prefix by QCA::applicationDirPath() via #ifdef
> 
> Opinions?

You might find useful building blocks for this in GammaRay. Instead of hard-
coding the absolute libexec dir there we compile in the relative path from bin 
to libexec (as that depends on the exact install layout you configure in 
CMake), and then combine that with QCoreApp::applicationDirPath() at runtime. 
Makes the whole installation relocatable, as long as you don't move things 
around within the install prefix itself.

regards,
Volker
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 173 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20150826/99b65803/attachment.sig>


More information about the Kde-frameworks-devel mailing list