<table><tr><td style="">habacker added a comment.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D5173" rel="noreferrer">View Revision</a></tr></table><br /><div><div><blockquote style="border-left: 3px solid #a7b5bf; color: #464c5c; font-style: italic; margin: 4px 0 12px 0; padding: 4px 12px; background-color: #f8f9fc;"><p>So bin isn't in %PATH%, but found relatively to the app being run?</p></blockquote>

<p>yes</p>

<blockquote style="border-left: 3px solid #a7b5bf; color: #464c5c; font-style: italic; margin: 4px 0 12px 0; padding: 4px 12px; background-color: #f8f9fc;"><p>This makes me wonder if libexec could be bin/libexec/kf5/ on Windows, relative too.</p></blockquote>

<p>This requires to add support for finding executables located in libexec based on install root e.g. instead of using</p>

<p>QString command = QStandardPaths::findExecutable(QStringLiteral("ksendbugmail5"));</p>

<p>to use something like this</p>

<p>QString installroot = getKF5Prefix();       // similar to what is implemented in KDE4 (see  <a href="https://cgit.kde.org/kdelibs.git/tree/kdecore/kernel/kkernel_win.cpp?h=KDE/4.14#n97" class="remarkup-link" target="_blank" rel="noreferrer">https://cgit.kde.org/kdelibs.git/tree/kdecore/kernel/kkernel_win.cpp?h=KDE/4.14#n97</a>)<br />
QString command = QStandardPaths::findExecutable(QStringLiteral("ksendbugmail"), installRoot + QStringLiteral("bin/libexec/kf5/"));  <br />
or <br />
QString command = QStandardPaths::findExecutable(QStringLiteral("ksendbugmail"), installRoot + QStringLiteral(KF5_LIBEXEC_INSTALL_DIR));</p>

<p>if KF5_LIBEXEC_INSTALL_DIR is a relative path to the requested subdir based on the install root.</p>

<blockquote style="border-left: 3px solid #a7b5bf; color: #464c5c; font-style: italic; margin: 4px 0 12px 0; padding: 4px 12px; background-color: #f8f9fc;"><p>Then we could have an ECM-provided string that expands to<br />
 CMAKE_INSTALL_PREFIX "/" KF5_LIBEXEC_INSTALL_DIR on Unix (i.e. absolute), and<br />
 KF5_LIBEXEC_INSTALL_DIR on Windows (i.e. relative).</p></blockquote>



<blockquote style="border-left: 3px solid #a7b5bf; color: #464c5c; font-style: italic; margin: 4px 0 12px 0; padding: 4px 12px; background-color: #f8f9fc;"><p>Wouldn't this keep the Unix/Windows differences to a minimum?</p></blockquote>

<p>Related to install layout it would be reduce the difference, but on the source code side you need to add detecting the install root to any code where an executable located in libexec needs to be searched, which increases the differences in the source code.</p>

<p>The complete code fragment would look like <br />
#ifndef Q_OS_WIN32</p>

<div class="remarkup-code-block" style="margin: 12px 0;" data-code-lang="text" data-sigil="remarkup-code-block"><pre class="remarkup-code" style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; padding: 12px; margin: 0; background: rgba(71, 87, 120, 0.08);">QString command = QStandardPaths::findExecutable(QStringLiteral("ksendbugmail"));
if (command.isEmpty()) {
    command = QFile::decodeName(CMAKE_INSTALL_PREFIX "/" KF5_LIBEXEC_INSTALL_DIR "/ksendbugmail");</pre></div>

<p>#else</p>

<div class="remarkup-code-block" style="margin: 12px 0;" data-code-lang="text" data-sigil="remarkup-code-block"><pre class="remarkup-code" style="font: 11px/15px "Menlo", "Consolas", "Monaco", monospace; padding: 12px; margin: 0; background: rgba(71, 87, 120, 0.08);">QString searchPath = getKF5Prefix() + QStringLiteral(KF5_LIBEXEC_INSTALL_DIR);
QString command = QStandardPaths::findExecutable(QStringLiteral("ksendbugmail"), searchPath);</pre></div>

<p>#endif</p>

<p>An optimization would be to call getKF5Prefix() on non Windows too, which returns  CMAKE_INSTALL_PREFIX "/". This  reduced the above mentioned code to</p>

<p>QString searchPath = getKF5Prefix() + QStringLiteral(KF5_LIBEXEC_INSTALL_DIR);<br />
QString command = QStandardPaths::findExecutable(QStringLiteral("ksendbugmail"), searchPath);</p>

<p>BTW: You mentioned  that KF5_LIBEXEC_INSTALL_DIR is 'bin/libexec/kf5/' on Windows, Should it not be lib/libexec/kf5  ? On unix this is located in 'lib[64]/libexec/kf5 '  - why this difference ?</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R263 KXmlGui</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D5173" rel="noreferrer">https://phabricator.kde.org/D5173</a></div></div><br /><div><strong>To: </strong>habacker<br /><strong>Cc: </strong>dfaure, aacid, Frameworks<br /></div>