SPS · log · files · refs · tags · releases · people · languages · GitHub · commit
edfc0da
mkiso: close Plasma QML libs and seed libpthread.a for autoconf.
Parents
Stat
bin/mkiso | 77 ++++++++++++++++++++++++++++++++++++++++++++++---- lib/mkiso/live-plasma | 1 + lib/mkiso/plasma-bins | 2 +- lib/mkiso/plasma-trees | 2 ++ lib/mkiso/seed-bins | 4 ++- tests/test_mkiso.sh | 28 ++++++++++++++++++ 6 files changed, 107 insertions(+), 7 deletions(-)
Diff
diff --git a/bin/mkiso b/bin/mkiso
index f32cce3..0bc2eb5 100755
--- a/bin/mkiso
+++ b/bin/mkiso
@@ -352,11 +352,14 @@ mkiso_copy_mesa_deps()
"$mkiso_live/usr/lib/gbm/nvidia-drm_gbm.so"
}
-# Session helpers and plugins plasmashell loads by soname. Tree copies can
-# leave the .so files in place while ldd of plasma-bins never saw them.
+# Session helpers and Plasma's own QML/applet plugins. Tree copies leave the
+# plugin .so files in place while their non-Qt libraries (taskmanager,
+# KExiv2, notificationmanager, processcore, and others) stay on the host.
mkiso_copy_plasma_runtime_deps()
{
printf '%s: resolving Plasma session libraries\n' "$sps_prog" >&2
+ mkiso_plasma_runtime=$mkiso_work/plasma-runtime-elfs
+ : >"$mkiso_plasma_runtime"
for mkiso_so in \
/usr/libexec/kactivitymanagerd \
/usr/libexec/kscreenlocker_greet \
@@ -364,15 +367,47 @@ mkiso_copy_plasma_runtime_deps()
/usr/bin/plasma_session \
/usr/bin/kwin_wayland \
/usr/bin/startplasma-wayland \
+ /usr/bin/xkbcomp \
/usr/lib64/libseat.so \
/usr/lib64/libseat.so.1 \
/usr/lib64/qt6/plugins/wayland-shell-integration/liblayer-shell.so \
/usr/lib64/qt6/plugins/styles/breeze6.so \
- /usr/lib64/qt6/plugins/platforms/libqwayland.so
+ /usr/lib64/qt6/plugins/platforms/libqwayland.so \
+ /usr/lib64/qt6/plugins/sqldrivers/libqsqlite.so \
+ /usr/lib64/qt6/qml/org/kde/kirigami/libKirigamiplugin.so \
+ /usr/lib64/qt6/plugins/kf6/kauth/backend/kauth_backend_plugin.so \
+ /usr/lib64/qt6/plugins/kwin/plugins/eis.so \
+ /usr/lib64/libtaskmanager.so.6 \
+ /usr/lib64/libKirigami.so.6 \
+ /usr/lib64/libKirigamiPlatform.so.6 \
+ /usr/lib/qt6/plugins/sqldrivers/libqsqlite.so \
+ /usr/lib/qt6/qml/org/kde/kirigami/libKirigamiplugin.so \
+ /usr/lib/qt6/plugins/kf6/kauth/backend/kauth_backend_plugin.so \
+ /usr/lib/qt6/plugins/kwin/plugins/eis.so
+ do
+ printf '%s\n' "$mkiso_so" >>"$mkiso_plasma_runtime"
+ done
+ # org/kde covers Kirigami, activityswitcher, and the rest of the
+ # desktop QML graph. plugins/plasma is applets; plugins/kwin is
+ # compositor helpers such as eis.so.
+ for mkiso_d in \
+ /usr/lib64/qt6/qml/org/kde \
+ /usr/lib64/qt6/plugins/plasma \
+ /usr/lib64/qt6/plugins/kwin \
+ /usr/lib/qt6/qml/org/kde \
+ /usr/lib/qt6/plugins/plasma \
+ /usr/lib/qt6/plugins/kwin
+ do
+ [ -d "$mkiso_d" ] || continue
+ find "$mkiso_d" -type f -name '*.so' -print 2>/dev/null \
+ >>"$mkiso_plasma_runtime"
+ done
+ LC_ALL=C sort -u "$mkiso_plasma_runtime" -o "$mkiso_plasma_runtime"
+ while IFS= read -r mkiso_so || [ -n "$mkiso_so" ]
do
[ -e "$mkiso_so" ] || [ -L "$mkiso_so" ] || continue
mkiso_copy_so_deps "$mkiso_so"
- done
+ done <"$mkiso_plasma_runtime"
}
# ldd a host ELF and require each resolved library to exist in the live
@@ -668,6 +703,22 @@ mkiso_verify_compiler()
sps_die "$SPS_EX_PACKAGE" \
"seeded live gcc is missing the libc.so linker script"
fi
+ # glibc 2.34 folded pthread into libc. On such hosts -lpthread is
+ # provided by a tiny compatibility archive rather than libpthread.so.
+ # Autoconf's ALSA probe still passes -lpthread explicitly.
+ if [ -e /usr/lib64/libpthread.a ] &&
+ [ ! -e "$mkiso_live/usr/lib64/libpthread.a" ]
+ then
+ sps_die "$SPS_EX_PACKAGE" \
+ "seeded live gcc is missing the libpthread.a linker archive"
+ fi
+ if [ -e /usr/bin/msgfmt ] &&
+ [ ! -e "$mkiso_live/usr/bin/msgfmt" ] &&
+ [ ! -L "$mkiso_live/usr/bin/msgfmt" ]
+ then
+ sps_die "$SPS_EX_PACKAGE" \
+ "seeded live gcc is missing msgfmt"
+ fi
if [ ! -e "$mkiso_live/usr/bin/as" ] &&
[ ! -L "$mkiso_live/usr/bin/as" ]
then
@@ -702,9 +753,15 @@ mkiso_verify_plasma()
[ "$mkiso_session" = plasma ] || return 0
mkiso_miss=
for mkiso_need in usr/bin/kwin_wayland usr/bin/kwin_wayland_wrapper \
- usr/bin/startplasma-wayland usr/bin/plasmashell \
+ usr/bin/startplasma-wayland usr/bin/plasmashell usr/bin/xkbcomp \
usr/libexec/kactivitymanagerd usr/libexec/kscreenlocker_greet \
usr/lib64/gbm/dri_gbm.so usr/lib64/libxcb-cursor.so.0 \
+ usr/lib64/libtaskmanager.so.6 usr/lib64/libKirigami.so.6 \
+ usr/lib64/qt6/plugins/sqldrivers/libqsqlite.so \
+ usr/lib64/qt6/qml/org/kde/kirigami/libKirigamiplugin.so \
+ usr/share/xkeyboard-config-2/rules/evdev \
+ usr/share/libinput/10-generic-keyboard.quirks \
+ usr/share/icons/breeze_cursors/index.theme \
etc/xdg/kscreenlockerrc
do
if [ ! -e "$mkiso_live/$mkiso_need" ] &&
@@ -743,6 +800,13 @@ mkiso_verify_plasma()
mkiso_verify_elf_in_live "$mkiso_g"
break
done
+ if [ -f "$mkiso_work/plasma-runtime-elfs" ]; then
+ while IFS= read -r mkiso_plugin || [ -n "$mkiso_plugin" ]
+ do
+ [ -e "$mkiso_plugin" ] || [ -L "$mkiso_plugin" ] || continue
+ mkiso_verify_elf_in_live "$mkiso_plugin"
+ done <"$mkiso_work/plasma-runtime-elfs"
+ fi
}
# setup extras/sets/profiles may only name packages that exist in the
@@ -1233,6 +1297,9 @@ if [ "$mkiso_copy_seed" -eq 1 ] && [ -f "$mkiso_libdir/seed-bins" ]; then
/usr/lib64/libresolv.so /usr/lib64/libanl.so \
/usr/lib64/libthread_db.so /usr/lib64/libgcc_s.so \
/usr/lib64/libstdc++.so /usr/lib64/libc_nonshared.a \
+ /usr/lib64/libpthread.a /usr/lib64/libdl.a \
+ /usr/lib64/librt.a /usr/lib64/libutil.a \
+ /usr/lib64/libanl.a \
/usr/lib64/libpthread_nonshared.a \
/usr/lib64/libmvec_nonshared.a \
/usr/lib64/rcrt1.o /usr/lib64/grcrt1.o \
diff --git a/lib/mkiso/live-plasma b/lib/mkiso/live-plasma
index bcf066b..7000669 100644
--- a/lib/mkiso/live-plasma
+++ b/lib/mkiso/live-plasma
@@ -22,6 +22,7 @@ export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib64/qt6/plugins/platforms
export QML2_IMPORT_PATH=/usr/lib64/qt6/qml
export LIBGL_DRIVERS_PATH=/usr/lib64/dri:/usr/lib/dri
export GBM_BACKENDS_PATH=/usr/lib64/gbm:/usr/lib/gbm
+export XCURSOR_THEME=breeze_cursors
# KWin is the compositor. QT_QPA_PLATFORM=wayland makes Qt try to
# connect to a display that does not exist yet, so kwin_wayland dies
# with "Failed to create wl_display" and plasmashell follows.
diff --git a/lib/mkiso/plasma-bins b/lib/mkiso/plasma-bins
index 412ab0c..b778b4f 100644
--- a/lib/mkiso/plasma-bins
+++ b/lib/mkiso/plasma-bins
@@ -36,6 +36,7 @@
/usr/libexec/dbus-daemon-launch-helper
/usr/bin/seatd
/usr/bin/Xwayland
+/usr/bin/xkbcomp
/usr/bin/Xorg
/usr/bin/xauth
/usr/bin/xrdb
@@ -61,4 +62,3 @@
/usr/libexec/xdg-desktop-portal-kde
/usr/libexec/xdg-document-portal
/usr/libexec/xdg-permission-store
-
diff --git a/lib/mkiso/plasma-trees b/lib/mkiso/plasma-trees
index 1cf4187..b7c299e 100644
--- a/lib/mkiso/plasma-trees
+++ b/lib/mkiso/plasma-trees
@@ -27,6 +27,8 @@
/usr/share/wayland-protocols
/usr/share/libdrm
/usr/share/X11
+/usr/share/xkeyboard-config-2
+/usr/share/libinput
/usr/lib64/xorg
/usr/lib/xorg
/etc/X11
diff --git a/lib/mkiso/seed-bins b/lib/mkiso/seed-bins
index fbdd9db..5da47ed 100644
--- a/lib/mkiso/seed-bins
+++ b/lib/mkiso/seed-bins
@@ -36,6 +36,9 @@
/usr/bin/unzip
/usr/bin/zip
/usr/bin/file
+/usr/bin/msgfmt
+/usr/bin/msgmerge
+/usr/bin/xgettext
/usr/bin/less
/usr/bin/nano
/usr/bin/vim
@@ -133,4 +136,3 @@
/usr/bin/setsid
/sbin/agetty
/usr/bin/getty
-
diff --git a/tests/test_mkiso.sh b/tests/test_mkiso.sh
index 0f36e58..b5aa390 100755
--- a/tests/test_mkiso.sh
+++ b/tests/test_mkiso.sh
@@ -145,6 +145,10 @@ grep -q /usr/share/kwin "$project_dir/lib/mkiso/plasma-trees" ||
fail 'plasma-trees must include /usr/share/kwin'
grep -q /etc/fonts "$project_dir/lib/mkiso/plasma-trees" ||
fail 'plasma-trees must include fontconfig'
+grep -q /usr/share/xkeyboard-config-2 "$project_dir/lib/mkiso/plasma-trees" ||
+ fail 'plasma-trees must include the real XKB rules behind /usr/share/X11/xkb'
+grep -q /usr/share/libinput "$project_dir/lib/mkiso/plasma-trees" ||
+ fail 'plasma-trees must include libinput device quirks'
grep -q kglobalacceld "$project_dir/lib/mkiso/plasma-bins" ||
fail 'plasma-bins must include kglobalacceld'
grep -q xdg-desktop-portal-kde "$project_dir/lib/mkiso/plasma-bins" ||
@@ -202,6 +206,8 @@ grep -q 'copying glibc startfiles' "$mkiso" ||
fail 'seeded ISO must copy glibc crt1.o for gcc'
grep -q crt1.o "$mkiso" ||
fail 'mkiso must copy crt1.o with the seed compiler'
+grep -q /usr/lib64/libpthread.a "$mkiso" ||
+ fail 'seeded ISO must copy the glibc -lpthread compatibility archive'
grep -q 'resolving gcc cc1 libraries' "$mkiso" ||
fail 'seeded ISO must ldd cc1 so libmpc/libisl land on the disc'
grep -q 'resolving Mesa DRI/GBM libraries' "$mkiso" ||
@@ -212,6 +218,8 @@ grep -q nvidia-drm_gbm "$mkiso" ||
fail 'plasma ISO must drop the nvidia GBM backend'
grep -q Xwayland "$project_dir/lib/mkiso/plasma-bins" ||
fail 'plasma-bins must include Xwayland'
+grep -q xkbcomp "$project_dir/lib/mkiso/plasma-bins" ||
+ fail 'plasma-bins must include xkbcomp for Xwayland keyboard setup'
grep -q xdg-document-portal "$project_dir/lib/mkiso/plasma-bins" ||
fail 'plasma-bins must include xdg-document-portal'
grep -q /usr/share/color-schemes "$project_dir/lib/mkiso/plasma-trees" ||
@@ -259,6 +267,10 @@ then
fi
grep -q 'copying file(1) magic database' "$mkiso" ||
fail 'seeded ISO must copy file(1) magic for autoconf'
+grep -q /usr/bin/msgfmt "$project_dir/lib/mkiso/seed-bins" ||
+ fail 'seeded ISO must include msgfmt for alsa-utils translations'
+grep -q /usr/bin/xgettext "$project_dir/lib/mkiso/seed-bins" ||
+ fail 'seeded ISO must include xgettext with the gettext tools'
grep -q '/etc/file' "$mkiso" ||
fail 'mkiso must copy /etc/file magic used by this host file(1)'
grep -q kactivitymanagerd "$project_dir/lib/mkiso/plasma-bins" ||
@@ -273,6 +285,22 @@ grep -q XDG_CURRENT_DESKTOP "$project_dir/lib/mkiso/live-plasma" ||
fail 'live-plasma must set XDG_CURRENT_DESKTOP=KDE'
grep -q mkiso_copy_plasma_runtime_deps "$mkiso" ||
fail 'plasma ISO must ldd session helpers (kactivitymanagerd, greeter)'
+grep -q libKirigamiplugin "$mkiso" ||
+ fail 'plasma ISO must ldd the Kirigami QML plugin closure'
+grep -q libqsqlite "$mkiso" ||
+ fail 'plasma ISO must ldd the Qt SQLite driver used by kactivitymanagerd'
+grep -q 'qt6/qml/org/kde' "$mkiso" ||
+ fail 'plasma ISO must close the Plasma QML plugin dependency graph'
+grep -q 'qt6/plugins/plasma' "$mkiso" ||
+ fail 'plasma ISO must close the Plasma applet plugin dependency graph'
+grep -q 'qt6/plugins/kwin' "$mkiso" ||
+ fail 'plasma ISO must close the KWin plugin dependency graph'
+grep -q libtaskmanager "$mkiso" ||
+ fail 'plasma ISO must verify libtaskmanager for the activity switcher'
+grep -q 'xkeyboard-config-2/rules/evdev' "$mkiso" ||
+ fail 'plasma ISO must verify the XKB evdev rules used by KWin'
+grep -q XCURSOR_THEME "$project_dir/lib/mkiso/live-plasma" ||
+ fail 'live-plasma must select a cursor theme that exists on the image'
grep -q 'using .* for headers, libraries, and pkg-config' "$project_dir/bin/mkpkg" ||
fail 'mkpkg must compile against SPS_ROOT so setup can link target libs'
grep -q write_cc_wrapper "$project_dir/bin/mkpkg" ||