From: Changqing Li Date: Fri, 16 Jan 2026 09:27:04 +0000 (+0800) Subject: procps: support ptest when TCLIBC is glibc X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fefaf8b0176ee91dd7705e99cbb30d9ac381c81f;p=thirdparty%2Fopenembedded%2Fopenembedded-core.git procps: support ptest when TCLIBC is glibc * support ptest for procps TCLIBC is glibc. The configure.ac only match LINUX as "linux-gnu", we can patch it to make test can run on musl lib system, but the upstream testsuite should only run on gnu libc host, some test cases only suitable for glibc, eg: Some of the error messages for free command on musl system is not the same as glibc system, which will make test failed. In order to avoid some other unexpected failure, just support ptest for glibc. * procps's testsuite use DejaGnu test framework. The testsuite is expected to run during build time, this implementation create the same folder structure as the testsuite expected to make it can work well. Signed-off-by: Changqing Li Signed-off-by: Antonin Godard Signed-off-by: Richard Purdie --- diff --git a/meta/conf/distro/include/ptest-packagelists.inc b/meta/conf/distro/include/ptest-packagelists.inc index 57e5e6e0f8..e417b0e024 100644 --- a/meta/conf/distro/include/ptest-packagelists.inc +++ b/meta/conf/distro/include/ptest-packagelists.inc @@ -59,6 +59,7 @@ PTESTS_FAST = "\ nettle \ opkg \ popt \ + procps \ python3-atomicwrites \ python3-attrs \ python3-bcrypt \ @@ -99,6 +100,7 @@ PTESTS_FAST:remove:mips64 = "qemu" PTESTS_PROBLEMS:append:mips64 = " qemu" PTESTS_FAST:remove:riscv32 = "qemu" PTESTS_PROBLEMS:append:riscv32 = " qemu" +PTESTS_FAST:remove:libc-musl = "procps" PTESTS_SLOW = "\ apr \ diff --git a/meta/recipes-extended/procps/procps/run-ptest b/meta/recipes-extended/procps/procps/run-ptest new file mode 100644 index 0000000000..0a74907fcc --- /dev/null +++ b/meta/recipes-extended/procps/procps/run-ptest @@ -0,0 +1,7 @@ +#!/bin/sh + +cd ./testsuite +for tool in @DEJATOOL@;do + runtest -a --tool $tool --outdir ../log +done + diff --git a/meta/recipes-extended/procps/procps_4.0.5.bb b/meta/recipes-extended/procps/procps_4.0.5.bb index 0e0e06f0d2..d39bb5062f 100644 --- a/meta/recipes-extended/procps/procps_4.0.5.bb +++ b/meta/recipes-extended/procps/procps_4.0.5.bb @@ -10,12 +10,14 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ DEPENDS = "ncurses" -inherit autotools gettext pkgconfig update-alternatives +inherit autotools gettext pkgconfig update-alternatives ${@bb.utils.contains('TCLIBC', 'glibc', 'ptest', '', d)} SRC_URI = "git://gitlab.com/procps-ng/procps.git;protocol=https;branch=master;tag=v${PV} \ file://sysctl.conf \ file://top_large_pid_fix.patch \ " +SRC_URI:append:libc-glibc = " file://run-ptest" + SRCREV = "f46b2f7929cdfe2913ed0a7f585b09d6adbf994e" # Upstream has a custom autogen.sh which invokes po/update-potfiles as they @@ -47,8 +49,51 @@ do_install:append () { fi } -CONFFILES:${PN} = "${sysconfdir}/sysctl.conf" +do_compile_ptest() { + oe_runmake -C testsuite site.exp + oe_runmake src/tests/test_process src/tests/test_strutils src/tests/test_fileutils src/tests/test_shm + DEJATOOL=$(make -C testsuite -s -f Makefile -f - <<'EOF' +all: + $(info $(DEJATOOL)) +EOF +) + echo $DEJATOOL > ${B}/testsuite/.dejatool +} + +do_install_ptest() { + install -d ${D}${PTEST_PATH}/testsuite + install -d ${D}${PTEST_PATH}/src + install -d ${D}${PTEST_PATH}/log + + cp -r ${S}/testsuite/* ${D}${PTEST_PATH}/testsuite/ + cp -r ${B}/testsuite/* ${D}${PTEST_PATH}/testsuite/ + cp -r ${B}/src/tests ${D}${PTEST_PATH}/src/ + + rm -rf ${D}${PTEST_PATH}/testsuite/Makefile* + rm -rf ${D}${PTEST_PATH}/testsuite/README + find ${D}${PTEST_PATH}/testsuite/ -type f -name "*.o" -exec rm -f {} + + find ${D}${PTEST_PATH}/src/ -type f -name "*.o" -exec rm -f {} + + + sed -i -e "/set srcdir/c\set srcdir ${PTEST_PATH}/testsuite" \ + -e "/set objdir/c\set objdir ${PTEST_PATH}/testsuite" ${D}${PTEST_PATH}/testsuite/site.exp + + DEJATOOL=$(cat ${B}/testsuite/.dejatool) + sed -i -e "s#@DEJATOOL@#$DEJATOOL#g" ${D}${PTEST_PATH}/run-ptest + for p in $DEJATOOL; do + if [ "$p" = "ps" ]; then + install -d ${D}${PTEST_PATH}/src/ps + ln -sf ${base_bindir}/ps ${D}${PTEST_PATH}/src/ps/pscommand + elif [ "$p" = "sysctl" ]; then + ln -sf ${base_sbindir}/$p ${D}${PTEST_PATH}/src/$p + elif [ "$p" = "kill" ] || [ "$p" = "pidof" ] || [ "$p" = "watch" ]; then + ln -sf ${base_bindir}/$p ${D}${PTEST_PATH}/src/$p + else + ln -sf ${bindir}/$p ${D}${PTEST_PATH}/src/$p + fi + done +} +CONFFILES:${PN} = "${sysconfdir}/sysctl.conf" bindir_progs = "free pkill pmap pgrep pwdx skill snice top uptime w" base_bindir_progs += "kill pidof ps watch" base_sbindir_progs += "sysctl" @@ -80,6 +125,8 @@ RDEPENDS:${PN} += "${PROCPS_PACKAGES}" RDEPENDS:${PN}-ps += "${PN}-lib" RDEPENDS:${PN}-sysctl += "${PN}-lib" +RDEPENDS:${PN}-ptest += "dejagnu bash glibc-utils" + FILES:${PN}-lib = "${libdir}" FILES:${PN}-ps = "${base_bindir}/ps.${BPN}" FILES:${PN}-sysctl = "${base_sbindir}/sysctl.${BPN} ${sysconfdir}/sysctl.conf ${sysconfdir}/sysctl.d"