aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-03-14 04:26:39 -0500
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-03-14 04:26:39 -0500
commitf3b5efd7982737f719527d408351f06aa1955a94 (patch)
tree9ad511dc6445d9a0a942ad9cf095ca27eff38481 /docker
parenteb780944ec8fb9df7f18c079cbd8eaff5bf96baa (diff)
Fix Qt version mixing: patchelf qt6plugins to use bundled lib/
Qt platform plugins (libqxcb.so, libqxcb-glx-integration.so, etc.) kept aqtinstall's hardcoded RPATH (/opt/qt6/6.10.2/gcc_64/lib) which doesn't exist on user systems. The linker fell through to system Qt, loading the wrong version into the process link map. When PyQt6 bindings later loaded libQt6OpenGLWidgets, glibc reused the already-cached system version, causing private-API symbol mismatches against our bundled Qt 6.10 (seen on Mint, Bazzite, and likely all distros with system Qt installed). All Qt plugins are one subdir deep under qt6plugins/, so $ORIGIN/../../lib correctly resolves to our lib/ for all of them. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'docker')
-rwxr-xr-xdocker/build-inner.sh6
1 files changed, 6 insertions, 0 deletions
diff --git a/docker/build-inner.sh b/docker/build-inner.sh
index ca2c648..42fa4c7 100755
--- a/docker/build-inner.sh
+++ b/docker/build-inner.sh
@@ -341,6 +341,12 @@ patchelf --force-rpath --set-rpath '$ORIGIN/lib' "${OUT_DIR}/ModOrganizer-core"
find "${OUT_DIR}/plugins" -maxdepth 1 -name "*.so" -exec patchelf --force-rpath --set-rpath '$ORIGIN/../lib' {} \; 2>/dev/null || true
find "${OUT_DIR}/plugins/libs" -name "*.so" -exec patchelf --force-rpath --set-rpath '$ORIGIN/../../lib' {} \; 2>/dev/null || true
find "${OUT_DIR}/lib" \( -name "*.so" -o -name "*.so.*" \) -exec patchelf --force-rpath --set-rpath '$ORIGIN' {} \; 2>/dev/null || true
+# Qt platform plugins keep aqtinstall's hardcoded RPATH (/opt/qt6/.../lib) which
+# doesn't exist on user systems — the linker falls through to system Qt, loading
+# the wrong version and poisoning the link map for all subsequent Qt library
+# lookups (including PyQt6 bindings). All Qt plugins sit one subdir deep under
+# qt6plugins/, so $ORIGIN/../../lib resolves correctly to our lib/ for all of them.
+find "${OUT_DIR}/qt6plugins" -name "*.so" -exec patchelf --force-rpath --set-rpath '$ORIGIN/../../lib' {} \; 2>/dev/null || true
# ── Launcher script ──
cat > "${OUT_DIR}/fluorine-manager" <<'LAUNCH'