diff mbox series

[V3] procps: support ptest when TCLIBC is glibc

Message ID 20260127085808.1980602-1-changqing.li@windriver.com
State New
Headers show
Series [V3] procps: support ptest when TCLIBC is glibc | expand

Commit Message

Changqing Li Jan. 27, 2026, 8:58 a.m. UTC
From: Changqing Li <changqing.li@windriver.com>

* 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 <changqing.li@windriver.com>
---
 .../distro/include/ptest-packagelists.inc     |  2 +
 meta/recipes-extended/procps/procps/run-ptest | 24 ++++++++
 meta/recipes-extended/procps/procps_4.0.5.bb  | 57 ++++++++++++++++++-
 3 files changed, 81 insertions(+), 2 deletions(-)
 create mode 100644 meta/recipes-extended/procps/procps/run-ptest

Comments

Richard Purdie Jan. 28, 2026, 11:32 a.m. UTC | #1
On Tue, 2026-01-27 at 16:58 +0800, Changqing Li via lists.openembedded.org wrote:
> From: Changqing Li <changqing.li@windriver.com>
> 
> * 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 <changqing.li@windriver.com>
> ---
>  .../distro/include/ptest-packagelists.inc     |  2 +
>  meta/recipes-extended/procps/procps/run-ptest | 24 ++++++++
>  meta/recipes-extended/procps/procps_4.0.5.bb  | 57 ++++++++++++++++++-
>  3 files changed, 81 insertions(+), 2 deletions(-)
>  create mode 100644 meta/recipes-extended/procps/procps/run-ptest

This might trigger a ptest warning:

https://autobuilder.yoctoproject.org/valkyrie/#/builders/73/builds/2990

Cheers,

Richard
Changqing Li Jan. 29, 2026, 7:39 a.m. UTC | #2
On 1/28/26 19:32, Richard Purdie wrote:
> CAUTION: This email comes from a non Wind River email account!
> Do not click links or open attachments unless you recognize the sender and know the content is safe.
>
> On Tue, 2026-01-27 at 16:58 +0800, Changqing Li via lists.openembedded.org wrote:
>> From: Changqing Li <changqing.li@windriver.com>
>>
>> * 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 <changqing.li@windriver.com>
>> ---
>>   .../distro/include/ptest-packagelists.inc     |  2 +
>>   meta/recipes-extended/procps/procps/run-ptest | 24 ++++++++
>>   meta/recipes-extended/procps/procps_4.0.5.bb  | 57 ++++++++++++++++++-
>>   3 files changed, 81 insertions(+), 2 deletions(-)
>>   create mode 100644 meta/recipes-extended/procps/procps/run-ptest
> This might trigger a ptest warning:
>
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/73/builds/2990

There are two test cases may run failed randomly.   it run "pmap -X pid 
pid",  and it expects the same total,

  but it is possible that the memory changes between the two walks of 
mypid's memory. I opened an issue upstream,

and send a V4 patch,  set these two case as XFAIL.


Regards

//changqing

>
> Cheers,
>
> Richard
Changqing Li Feb. 9, 2026, 1:58 a.m. UTC | #3
Ping


Regard

//Changqing

On 1/29/26 15:48, Changqing Li via lists.openembedded.org wrote:
> From: Changqing Li <changqing.li@windriver.com>
>
> * 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.
>
> * Two pmap test cases may randomly run failed, so set it as xfail, and
>    open a issue upstream
>
> [1] https://gitlab.com/procps-ng/procps/-/issues/409
>
> Signed-off-by: Changqing Li <changqing.li@windriver.com>
> ---
>   .../distro/include/ptest-packagelists.inc     |  2 +
>   meta/recipes-extended/procps/procps/run-ptest | 24 ++++++++
>   meta/recipes-extended/procps/procps_4.0.5.bb  | 60 ++++++++++++++++++-
>   3 files changed, 84 insertions(+), 2 deletions(-)
>   create mode 100644 meta/recipes-extended/procps/procps/run-ptest
>
> diff --git a/meta/conf/distro/include/ptest-packagelists.inc b/meta/conf/distro/include/ptest-packagelists.inc
> index fff2947177..2391224527 100644
> --- a/meta/conf/distro/include/ptest-packagelists.inc
> +++ b/meta/conf/distro/include/ptest-packagelists.inc
> @@ -57,6 +57,7 @@ PTESTS_FAST = "\
>       nettle \
>       opkg \
>       popt \
> +    procps \
>       python3-atomicwrites \
>       python3-attrs \
>       python3-bcrypt \
> @@ -97,6 +98,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..7e132653b0
> --- /dev/null
> +++ b/meta/recipes-extended/procps/procps/run-ptest
> @@ -0,0 +1,24 @@
> +#!/bin/sh
> +
> +# Run testsuite which use dejagnu
> +cd ./testsuite
> +for tool in @DEJATOOL@; do
> +    runtest -a --tool $tool --outdir ../log
> +done
> +cd -
> +
> +# Run test programs not used by dejagnu but run directly
> +for p in @TESTS@; do
> +    ./src/tests/"$p" > ./log/"$p".log 2>&1
> +    case "$?" in
> +        0)
> +            echo "PASS: $p"
> +            ;;
> +        77)
> +            echo "SKIP: $p"
> +            ;;
> +        *)
> +            echo "FAIL: $p"
> +            ;;
> +    esac
> +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..bccfee1de9 100644
> --- a/meta/recipes-extended/procps/procps_4.0.5.bb
> +++ b/meta/recipes-extended/procps/procps_4.0.5.bb
> @@ -10,11 +10,12 @@ 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 \
> +           file://run-ptest \
>              "
>   SRCREV = "f46b2f7929cdfe2913ed0a7f585b09d6adbf994e"
>   
> @@ -47,8 +48,61 @@ do_install:append () {
>           fi
>   }
>   
> -CONFFILES:${PN} = "${sysconfdir}/sysctl.conf"
> +do_compile_ptest() {
> +    for p in $(makefile-getvar ${B}/Makefile check_PROGRAMS); do
> +        oe_runmake $p
> +    done
> +    oe_runmake -C testsuite site.exp
> +}
> +
> +do_install_ptest() {
> +     install -d ${D}${PTEST_PATH}/testsuite
> +     install -d ${D}${PTEST_PATH}/src/tests
> +     install -d ${D}${PTEST_PATH}/log
> +
> +     install -m644 ${B}/testsuite/site.exp ${D}${PTEST_PATH}/testsuite/
> +     for p in $(makefile-getvar ${B}/testsuite/Makefile noinst_PROGRAMS); do
> +         install -m755 ${B}/testsuite/$p ${D}${PTEST_PATH}/testsuite/
> +     done
> +     cp -r ${S}/testsuite/* ${D}${PTEST_PATH}/testsuite/
> +
> +     for p in $(makefile-getvar ${B}/Makefile check_PROGRAMS);do
> +         case "$p" in
> +             src/tests/*)
> +                 install -m 0755 ${B}/$p ${D}${PTEST_PATH}/src/tests/ ;;
> +             library/tests/*)
> +                 install -m 0755 ${B}/library/tests/.libs/$(basename $p)  ${D}${PTEST_PATH}/src/tests/ ;;
> +         esac
> +     done
> +
> +     tests=""
> +     for p in $(makefile-getvar ${B}/Makefile TESTS); do
> +         tests="$tests $(basename $p)"
> +     done
> +     sed -i -e "s#@TESTS@#$tests#" ${D}${PTEST_PATH}/run-ptest
> +
> +     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
> +
> +     sed -i -e "s#@DEJATOOL@#$(makefile-getvar ${B}/testsuite/Makefile DEJATOOL)#" ${D}${PTEST_PATH}/run-ptest
> +     for p in $(makefile-getvar ${B}/testsuite/Makefile 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
>   
> +     sed -i -e '/set test "pmap X pid pid has same total"/a \setup_xfail *-*-linux*' \
> +            -e '/set test "pmap XX pid pid has same total"/a \setup_xfail *-*-linux*' ${D}${PTEST_PATH}/testsuite/pmap.test/pmap.exp
> +}
> +
> +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 +134,8 @@ RDEPENDS:${PN} += "${PROCPS_PACKAGES}"
>   RDEPENDS:${PN}-ps += "${PN}-lib"
>   RDEPENDS:${PN}-sysctl += "${PN}-lib"
>   
> +RDEPENDS:${PN}-ptest += "dejagnu 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"
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#230122): https://lists.openembedded.org/g/openembedded-core/message/230122
> Mute This Topic: https://lists.openembedded.org/mt/117523139/3616873
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [changqing.li@windriver.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
diff mbox series

Patch

diff --git a/meta/conf/distro/include/ptest-packagelists.inc b/meta/conf/distro/include/ptest-packagelists.inc
index fff2947177..2391224527 100644
--- a/meta/conf/distro/include/ptest-packagelists.inc
+++ b/meta/conf/distro/include/ptest-packagelists.inc
@@ -57,6 +57,7 @@  PTESTS_FAST = "\
     nettle \
     opkg \
     popt \
+    procps \
     python3-atomicwrites \
     python3-attrs \
     python3-bcrypt \
@@ -97,6 +98,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..7e132653b0
--- /dev/null
+++ b/meta/recipes-extended/procps/procps/run-ptest
@@ -0,0 +1,24 @@ 
+#!/bin/sh
+
+# Run testsuite which use dejagnu
+cd ./testsuite
+for tool in @DEJATOOL@; do
+    runtest -a --tool $tool --outdir ../log
+done
+cd -
+
+# Run test programs not used by dejagnu but run directly
+for p in @TESTS@; do
+    ./src/tests/"$p" > ./log/"$p".log 2>&1
+    case "$?" in
+        0)
+            echo "PASS: $p"
+            ;;
+        77)
+            echo "SKIP: $p"
+            ;;
+        *)
+            echo "FAIL: $p"
+            ;;
+    esac
+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..cddb79cf10 100644
--- a/meta/recipes-extended/procps/procps_4.0.5.bb
+++ b/meta/recipes-extended/procps/procps_4.0.5.bb
@@ -10,11 +10,12 @@  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 \
+           file://run-ptest \
            "
 SRCREV = "f46b2f7929cdfe2913ed0a7f585b09d6adbf994e"
 
@@ -47,8 +48,58 @@  do_install:append () {
         fi
 }
 
-CONFFILES:${PN} = "${sysconfdir}/sysctl.conf"
+do_compile_ptest() {
+    for p in $(makefile-getvar ${B}/Makefile check_PROGRAMS); do
+        oe_runmake $p
+    done
+    oe_runmake -C testsuite site.exp
+}
 
+do_install_ptest() {
+     install -d ${D}${PTEST_PATH}/testsuite
+     install -d ${D}${PTEST_PATH}/src/tests
+     install -d ${D}${PTEST_PATH}/log
+
+     install -m644 ${B}/testsuite/site.exp ${D}${PTEST_PATH}/testsuite/
+     for p in $(makefile-getvar ${B}/testsuite/Makefile noinst_PROGRAMS); do
+         install -m755 ${B}/testsuite/$p ${D}${PTEST_PATH}/testsuite/
+     done
+     cp -r ${S}/testsuite/* ${D}${PTEST_PATH}/testsuite/
+
+     for p in $(makefile-getvar ${B}/Makefile check_PROGRAMS);do
+         case "$p" in
+             src/tests/*)
+                 install -m 0755 ${B}/$p ${D}${PTEST_PATH}/src/tests/ ;;
+             library/tests/*)
+                 install -m 0755 ${B}/library/tests/.libs/$(basename $p)  ${D}${PTEST_PATH}/src/tests/ ;;
+         esac
+     done
+
+     tests=""
+     for p in $(makefile-getvar ${B}/Makefile TESTS); do
+         tests="$tests $(basename $p)"
+     done
+     sed -i -e "s#@TESTS@#$tests#" ${D}${PTEST_PATH}/run-ptest
+
+     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
+
+     sed -i -e "s#@DEJATOOL@#$(makefile-getvar ${B}/testsuite/Makefile DEJATOOL)#" ${D}${PTEST_PATH}/run-ptest
+     for p in $(makefile-getvar ${B}/testsuite/Makefile 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 +131,8 @@  RDEPENDS:${PN} += "${PROCPS_PACKAGES}"
 RDEPENDS:${PN}-ps += "${PN}-lib"
 RDEPENDS:${PN}-sysctl += "${PN}-lib"
 
+RDEPENDS:${PN}-ptest += "dejagnu 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"