Splux Linux

source-based Linux using SPS

SPS · log · files · refs · tags · releases · people · languages · GitHub · commit

edfc0da


mkiso: close Plasma QML libs and seed libpthread.a for autoconf.

Date
Commitedfc0da594c3f4ce039e6ce3ad26970935e118a6
GitHubmirror

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" ||