Gyorgy Sarvari 68a1f0b45c tar: use diffutils for ptest instead of busybox
A testcase (sparse03) sometimes times out on the AB, in qemu (without kvm):
the test generates an 8GB sparse file, tars it, untars it, and then
it compares the two versions with cmp.

This process, going through 16GB of data (using one thread, with cmp) takes some
time anyway, but when there is extra load on the host machine, and qemu
can't use its core exclusively, then it can take more than 5 minutes easily
(which is the default ptest timeout).

However the full version of cmp from diffutils seems to be more efficient than
the busybox version:

When using busybox on my idle machine (w/ qemuriscv64) the test case execution
takes 150s, and it almost always times out when there is extra load.

Using diffutils, my idle machine executes the same testcase in 55s, and it
never times out even if there is high load on the host system (execution
always stayed under 3 minutes).

Due to this switch to diffutils when running ptest.

Fixes [YOCTO 15884]

(From OE-Core rev: 81f7b60fb1c5096bbc233f632040d1ea9ec5bb21)

Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2025-10-30 11:06:28 +00:00

101 lines
3.3 KiB
BlitzBasic

SUMMARY = "GNU file archiving program"
DESCRIPTION = "GNU tar saves many files together into a single tape \
or disk archive, and can restore individual files from the archive."
HOMEPAGE = "http://www.gnu.org/software/tar/"
SECTION = "base"
LICENSE = "GPL-3.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
SRC_URI = "${GNU_MIRROR}/tar/tar-${PV}.tar.bz2"
SRC_URI[sha256sum] = "7edb8886a3dc69420a1446e1e2d061922b642f1cf632d2cd0f9ee7e690775985"
inherit autotools gettext texinfo
PACKAGECONFIG ??= ""
PACKAGECONFIG:append:class-target = " ${@bb.utils.filter('DISTRO_FEATURES', 'acl', d)}"
PACKAGECONFIG[acl] = "--with-posix-acls,--without-posix-acls,acl"
PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux"
EXTRA_OECONF += "DEFAULT_RMT_DIR=${sbindir}"
CACHED_CONFIGUREVARS += "tar_cv_path_RSH=no"
do_install () {
autotools_do_install
ln -s tar ${D}${bindir}/gtar
}
do_install:append:class-target() {
if [ "${base_bindir}" != "${bindir}" ]; then
install -d ${D}${base_bindir}
mv ${D}${bindir}/tar ${D}${base_bindir}/tar
mv ${D}${bindir}/gtar ${D}${base_bindir}/gtar
rmdir ${D}${bindir}/
fi
}
# add for ptest support
SRC_URI += " \
file://run-ptest \
file://0001-tests-fix-TESTSUITE_AT.patch \
file://0002-tests-check-for-recently-fixed-bug.patch \
file://0003-Exclude-VCS-directory-with-writing-from-an-archive.patch \
"
inherit ptest
do_compile_ptest() {
oe_runmake -C ${B}/gnu/ check
oe_runmake -C ${B}/lib/ check
oe_runmake -C ${B}/rmt/ check
oe_runmake -C ${B}/src/ check
rm -rf ${S}/tests/testsuite
oe_runmake -C ${B}/tests/ testsuite
oe_runmake -C ${B}/tests/ genfile checkseekhole ckmtime
}
do_install_ptest() {
install -d ${D}${PTEST_PATH}/tests/
install --mode=755 ${B}/tests/atconfig ${D}${PTEST_PATH}/tests/
sed -i "/abs_/d" ${D}${PTEST_PATH}/tests/atconfig
echo "abs_builddir=${PTEST_PATH}/tests/" >> ${D}${PTEST_PATH}/tests/atconfig
install --mode=755 ${B}/tests/atlocal ${D}${PTEST_PATH}/tests/
sed -i "/PATH=/d" ${D}${PTEST_PATH}/tests/atlocal
install --mode=755 ${B}/tests/genfile ${D}${PTEST_PATH}/tests/
install --mode=755 ${B}/tests/checkseekhole ${D}${PTEST_PATH}/tests/
install --mode=755 ${B}/tests/ckmtime ${D}${PTEST_PATH}/tests/
install --mode=755 ${S}/tests/testsuite ${D}${PTEST_PATH}/tests/
sed -i "s#@PTEST_PATH@#${PTEST_PATH}#g" ${D}${PTEST_PATH}/run-ptest
}
PACKAGES =+ "${PN}-rmt"
FILES:${PN}-rmt = "${sbindir}/rmt*"
inherit update-alternatives
ALTERNATIVE_PRIORITY = "100"
ALTERNATIVE:${PN} = "tar"
ALTERNATIVE:${PN}-rmt = "rmt"
ALTERNATIVE:${PN}:class-nativesdk = ""
ALTERNATIVE:${PN}-rmt:class-nativesdk = ""
ALTERNATIVE_LINK_NAME[tar] = "${base_bindir}/tar"
ALTERNATIVE_LINK_NAME[rmt] = "${sbindir}/rmt"
PROVIDES:append:class-native = " tar-replacement-native"
NATIVE_PACKAGE_PATH_SUFFIX = "/${PN}"
BBCLASSEXTEND = "native nativesdk"
# Avoid false positives from CVEs in node-tar package
# For example CVE-2021-{32803,32804,37701,37712,37713}
CVE_PRODUCT = "gnu:tar"
# A test uses cmp to compare two 8GB files. Busybox's cmp does the job usually, but it is much slower than
# diffutils' cmp, and the test times out when there is a high load on the host machine.
RDEPENDS:${PN}-ptest += "diffutils"