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