Qt has a feature called relocatable build which is enabled by default: https://www.qt.io/blog/qt-is-relocatable On musl system with merged-usr, qt will use '/' as install prefix, instead of '/usr', and break some programs. > falkon Fatal: The following paths were searched for Qt WebEngine resources: /share/qt6/resources /share/qt6 /usr/bin /home/<$USER>/.falkon but could not find any. You may override the default search paths by using QTWEBENGINE_RESOURCES_PATH environment variable. zsh: abort (core dumped) falkon Reproducible: Always Steps to Reproduce: Test code1: (test.cpp) ``` #include <QLibraryInfo> #include <iostream> int main() { #if QT_VERSION >= 0x060000 auto data_path = QLibraryInfo::path(QLibraryInfo::DataPath).toStdString(); #else auto data_path = QLibraryInfo::location(QLibraryInfo::DataPath).toStdString(); #endif std::cout << data_path << std::endl; } ``` Build against qt6: `c++ -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -lQt6Core test.cpp -o test` Build against qt5: `c++ -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -lQt5Core test.cpp -o test` Output on glibc system with merged-usr: `/usr/share/qt6` and `/usr/share/qt5` Output on musl system with merged-usr: `/share/qt6` and `/share/qt5` On musl system with merged-usr: > ldd test | grep Qt6 libQt6Core.so.6 => /lib/libQt6Core.so.6 (0x7ff9ce238000) > ldd test | grep Qt5 libQt5Core.so.5 => /lib/libQt5Core.so.5 (0x7f7e8bcb8000) On glibc system with merged-usr: > ldd test | grep Qt libQt6Core.so.6 => /usr/lib64/libQt6Core.so.6 (0x00007f71d8aaa000) > ldd test | grep Qt libQt5Core.so.5 => /usr/lib64/libQt5Core.so.5 (0x00007f21894e3000) Qt use following code to detect runtime prefix: Test Code2: (path.cpp) ``` #include <QLibraryInfo> #include <dlfcn.h> #include <iostream> int main() { Dl_info info; int result = dladdr(reinterpret_cast<void *>(&QLibraryInfo::isDebugBuild), &info); if (result > 0 && info.dli_fname) { std::cout << info.dli_fname << std::endl; } } ``` Build against qt6: `c++ -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -lQt6Core path.cpp -o path` Build against qt5: `c++ -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -lQt5Core path.cpp -o path` Output on glibc system with merged-usr: `/usr/lib64/libQt6Core.so.6` `/usr/lib64/libQt5Core.so.5` Output on musl system with merged-usr: `/lib/libQt6Core.so.6` and `/lib/libQt5Core.so.5` Possible solution 1. Disable relocatable feature of qt 2. Remove `/lib` in /etc/ld-musl-x86_64.path on system with merged-usr. This file is generated by ldconfig from musl ebuild
Thank you for the analysis.
(In reply to 12101111 from comment #0) > Possible solution > 1. Disable relocatable feature of qt > 2. Remove `/lib` in /etc/ld-musl-x86_64.path on system with merged-usr. This > file is generated by ldconfig from musl ebuild I see little reason not to do both. Relocatable feature seems pointless for our use case, and don't see why not disable it for everyone, and then unnecessary duplication with the /lib symlink should be avoided too. Just to be sure, did you actually try to turn it off to see if *did* help? Aka, I assume this does it on dev-qt/qtbase: MYCMAKEARGS="-DQT_FEATURE_relocatable=OFF" Should show: relocatable ............................ no (unsure if I'll bother experimenting with this myself w/ musl beside just turning it off) Also don't know if other dev-qt/* need to be rebuilt as well, not that it matters that much given I could do this change only in Qt6.6.3 anyway and save people from revbumps (currently due to release tomorrow, and won't wait all that long to stabilize it given 6.7.0 will take over in ~testing).
(In reply to Ionen Wolkens from comment #2) > (unsure if I'll bother experimenting with this myself w/ musl beside just > turning it off) On that note, I hope it won't affect finding resources during tests which uses Qt from a temporary location and lot of these tests tend to expect Qt to be already installed on top.
It seems rebuild dev-qt/* is not needed. Just disable relocatable in dev-qt/qtcore:5 and dev-qt/qtbase:6 then rebuild them.
(In reply to 12101111 from comment #4) > It seems rebuild dev-qt/* is not needed. > Just disable relocatable in dev-qt/qtcore:5 and dev-qt/qtbase:6 then rebuild > them. Oh 5 is affected too? Never really looked at Qt5 at all, so I typically don't touch it myself.
(In reply to Ionen Wolkens from comment #5) > (In reply to 12101111 from comment #4) > > It seems rebuild dev-qt/* is not needed. > > Just disable relocatable in dev-qt/qtcore:5 and dev-qt/qtbase:6 then rebuild > > them. > Oh 5 is affected too? Never really looked at Qt5 at all, so I typically > don't touch it myself. And right, you gave examples for that too. Kind of forgot while writing a reply though :) I'll handle it for qtbase with 6.6.3, and may revbump 6.6.2 at same time as the bump for stable users given likely more users doing migration with 23.0 now. I'll leave qtcore to asturm or whomever else want to look at that though.
(In reply to Ionen Wolkens from comment #3) > (In reply to Ionen Wolkens from comment #2) > > (unsure if I'll bother experimenting with this myself w/ musl beside just > > turning it off) > On that note, I hope it won't affect finding resources during tests which > uses Qt from a temporary location and lot of these tests tend to expect Qt > to be already installed on top. Well, seems already getting some failing tests due to relocatable=OFF (or at least when qtbase is not already installed) -- albeit barely tried and unsure for scope given low on resources to run Qt builds atm. May skip if it's just a few, otherwise unsure yet.
(In reply to Ionen Wolkens from comment #7) > (In reply to Ionen Wolkens from comment #3) > > (In reply to Ionen Wolkens from comment #2) > > > (unsure if I'll bother experimenting with this myself w/ musl beside just > > > turning it off) > > On that note, I hope it won't affect finding resources during tests which > > uses Qt from a temporary location and lot of these tests tend to expect Qt > > to be already installed on top. > Well, seems already getting some failing tests due to relocatable=OFF (or at > least when qtbase is not already installed) -- albeit barely tried and > unsure for scope given low on resources to run Qt builds atm. > > May skip if it's just a few, otherwise unsure yet. Well, after a full run of dev-qt/* tests, turns out it didn't affect anything but 3 tests on qtbase and other tests are still able to find everything fine, so will just skip these. Keeping this locally until tomorrow to do together with the 6.6.3 bump still tho.
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4d83f8f0859e6060cb191e2b7b66259937369f20 commit 4d83f8f0859e6060cb191e2b7b66259937369f20 Author: Ionen Wolkens <ionen@gentoo.org> AuthorDate: 2024-03-24 11:37:58 +0000 Commit: Ionen Wolkens <ionen@gentoo.org> CommitDate: 2024-03-25 22:08:06 +0000 dev-qt/qtbase: disable relocatable builds And skip 3 tests that newly fail to find some resources (or at least, if qtbase is not already installed). Not worth keeping enabled over these. Meant to wait for 6.6.3 to merge this to lessen rebuilds, but looks like it may(?) be delayed again. Bug: https://bugs.gentoo.org/927691 Signed-off-by: Ionen Wolkens <ionen@gentoo.org> dev-qt/qtbase/{qtbase-6.6.2.ebuild => qtbase-6.6.2-r1.ebuild} | 5 +++++ dev-qt/qtbase/qtbase-6.6.9999.ebuild | 5 +++++ .../qtbase/{qtbase-6.7.0_rc2.ebuild => qtbase-6.7.0_rc2-r1.ebuild} | 5 +++++ dev-qt/qtbase/qtbase-6.7.9999.ebuild | 5 +++++ dev-qt/qtbase/qtbase-6.9999.ebuild | 5 +++++ 5 files changed, 25 insertions(+)