diff options
| author | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-03-14 04:06:40 -0500 |
|---|---|---|
| committer | SulfurNitride <SulfurNitride@users.noreply.github.com> | 2026-03-14 04:06:40 -0500 |
| commit | eb780944ec8fb9df7f18c079cbd8eaff5bf96baa (patch) | |
| tree | d404db8d7b53c6303df5724a5c697e03c97118f4 /docker | |
| parent | 6e793adbc1bff4586ae57d23c825c556a5d270b5 (diff) | |
Bundle Qt libs missing from PyQt6 dep scan (fixes Bazzite crash)
PyQt6 is staged after the main dep-collection loop, so its .so deps
(e.g. libQt6OpenGLWidgets) were never copied to lib/. The dynamic linker
then fell back to the host's Qt RPM build, which exports Qt_6.*_PRIVATE_API
version symbols that aqtinstall's Qt doesn't — causing a crash on Fedora-
based distros (Bazzite, etc.) whenever a Python plugin imported PyQt6 OpenGL.
Add a post-PyQt6 dep scan that bundles any Qt libs not yet present in lib/.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'docker')
| -rwxr-xr-x | docker/build-inner.sh | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/docker/build-inner.sh b/docker/build-inner.sh index fc98c39..ca2c648 100755 --- a/docker/build-inner.sh +++ b/docker/build-inner.sh @@ -306,6 +306,22 @@ find "${PYQT6_OUT}" -name "*.so" -exec \ strip --strip-unneeded "${PYQT6_OUT}"/*.so 2>/dev/null || true echo "Bundled PyQt6 (no Qt dupe): $(du -sh "${PYQT6_OUT}" | cut -f1)" +# Scan PyQt6 binding deps and bundle any Qt libs not yet in lib/. +# PyQt6 is bundled after the main dep-collection loop, so its deps (e.g. +# libQt6OpenGLWidgets) would otherwise be missing. Without them the dynamic +# linker falls back to the host's Qt RPM build, which uses Qt_6.*_PRIVATE_API +# version symbols that aqtinstall's Qt libs don't export — causing crashes on +# distros like Bazzite/Fedora that ship their own Qt. +echo "Scanning PyQt6 deps for missing Qt libs..." +find "${PYQT6_OUT}" -name "*.so" | while read -r pyqt_so; do + ldd "${pyqt_so}" 2>/dev/null | grep "=>" | awk '{print $3}' | grep "^/" | while read -r dep; do + dep_name="$(basename "${dep}")" + if echo "${dep_name}" | grep -qE "${SKIP_PATTERN}"; then continue; fi + if [ -f "${OUT_DIR}/lib/${dep_name}" ]; then continue; fi + cp -Lf "${dep}" "${OUT_DIR}/lib/" 2>/dev/null && echo " + ${dep_name}" || true + done +done + # ── Strip all MO2 binaries ── echo "Stripping MO2 binaries..." strip --strip-unneeded "${OUT_DIR}/ModOrganizer-core" 2>/dev/null || true |
