mirror of
https://git.yoctoproject.org/poky
synced 2026-02-28 20:39:39 +01:00
The execscript test in bash fails when run with ptest-runner calling
'su', with the error:
bash: cannot set terminal process group (16036): Inappropriate ioctl for device
Even with ptest-runner fixed to make a child process use the right
process group, 'su' still results in the warning above. Use 'setpriv'
instead. 'runuser' was considered and works but depends on pam so it's
ruled out.
Now that all bash tests are run as a user, the patch:
fix-run-coproc-run-heredoc-run-execscript-run-test-f.patch
can be removed. Also to create the account 'bashtest' in the
'run-ptest' script the bash-ptest must depend on 'shadow'. Also,
in 'run-ptest', ensure that the bash ptests are owned by the 'bashtest' user.
Add 'sed' as a dependency for ptests since tests/exp8.sub runs:
var=$'x\001y\177z'
declare -p var | sed -n l
and that results in:
sed.busybox: ""
sed.sed: declare -- var="x\001y\177z"$
This appears to be a feature that busybox sed has not implemented.
With this series of changes, bash-ptest for qemux86-64 passes
79 of 81 tests. The remaining failures are:
1. run-read:
# cat tests/read6.sub
# test read with a timeout of 0 -- input polling
# sleep with fractional seconds argument is not universal
echo abcde | { sleep 0.25 2>/dev/null ; read -t 0; }
echo $?
read -t 0 < $0
echo $?
read -t 0
echo $? <-- returns 1, when 0 is expected.
I can reproduce this on my workstation but only when using ptest-runner
and initially logging into the console as root. That's a little odd and
seems like I need to continue to improve ptest-runner.
2. run-trap:
# cat tests/trap3.sub
PS4='+[$LINENO] '
trap 'echo trap: $LINENO' ERR
set -x
echo 1
echo 2
echo 3 | cat | false <--- error
echo 4
This is a scheduler behaviour difference between the common case
on a workstation and the common case in qemu. The test case does
warn about the completion order not being deterministic so I plan
to ignore it.
>From tests/run-trap:
UNIX versions number signals and schedule processes differently.
If output differing only in line numbers is produced, please
do not consider this a test failure.
Still, it's notable and slightly odd that the common case output
is different.
(From OE-Core rev: 81e3f01867cf114b728ab5a417c29426c9bf8122)
Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
Signed-off-by: Randy MacLeod <Randy.MacLeod@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
105 lines
3.5 KiB
PHP
105 lines
3.5 KiB
PHP
SUMMARY = "An sh-compatible command language interpreter"
|
|
HOMEPAGE = "http://tiswww.case.edu/php/chet/bash/bashtop.html"
|
|
SECTION = "base/shell"
|
|
|
|
DEPENDS = "ncurses bison-native virtual/libiconv"
|
|
|
|
inherit autotools gettext texinfo update-alternatives ptest
|
|
|
|
EXTRA_AUTORECONF += "--exclude=autoheader --exclude=aclocal"
|
|
EXTRA_OECONF = "--enable-job-control --without-bash-malloc bash_cv_wexitstatus_offset=8"
|
|
|
|
# If NON_INTERACTIVE_LOGIN_SHELLS is defined, all login shells read the
|
|
# startup files, even if they are not interactive.
|
|
# This is what other major distros do. And this is what we wanted. See bug#5359 and bug#7137.
|
|
CFLAGS += "-DNON_INTERACTIVE_LOGIN_SHELLS"
|
|
|
|
ALTERNATIVE_${PN} = "bash sh"
|
|
ALTERNATIVE_LINK_NAME[bash] = "${base_bindir}/bash"
|
|
ALTERNATIVE_TARGET[bash] = "${base_bindir}/bash"
|
|
ALTERNATIVE_LINK_NAME[sh] = "${base_bindir}/sh"
|
|
ALTERNATIVE_TARGET[sh] = "${base_bindir}/bash.${BPN}"
|
|
ALTERNATIVE_PRIORITY = "100"
|
|
|
|
RDEPENDS_${PN} += "base-files"
|
|
RDEPENDS_${PN}_class-nativesdk = ""
|
|
RDEPENDS_${PN}-ptest += "make coreutils perl sed shadow util-linux-setpriv"
|
|
|
|
DEPENDS_append_libc-glibc = " virtual/libc-locale"
|
|
RDEPENDS_${PN}-ptest_append_libc-glibc = " \
|
|
glibc-gconv-big5hkscs \
|
|
glibc-gconv-iso8859-1 \
|
|
glibc-utils \
|
|
locale-base-de-de \
|
|
locale-base-en-us \
|
|
locale-base-fr-fr \
|
|
locale-base-fr-fr.iso-8859-1 \
|
|
locale-base-zh-hk.big5-hkscs \
|
|
"
|
|
|
|
CACHED_CONFIGUREVARS += "headersdir=${includedir}/${PN}"
|
|
|
|
do_compile_ptest () {
|
|
oe_runmake buildtest
|
|
}
|
|
|
|
do_install_append () {
|
|
# Move /usr/bin/bash to /bin/bash, if need
|
|
if [ "${base_bindir}" != "${bindir}" ]; then
|
|
mkdir -p ${D}${base_bindir}
|
|
mv ${D}${bindir}/bash ${D}${base_bindir}
|
|
fi
|
|
}
|
|
do_install_append_class-target () {
|
|
# Clean buildhost references in bashbug
|
|
sed -i -e "s,--sysroot=${STAGING_DIR_TARGET},,g" \
|
|
-e "s,-I${WORKDIR}/\S* ,,g" \
|
|
-e 's|${DEBUG_PREFIX_MAP}||g' \
|
|
${D}${bindir}/bashbug
|
|
|
|
# Clean buildhost references in bash.pc
|
|
sed -i -e "s,--sysroot=${STAGING_DIR_TARGET},,g" \
|
|
${D}${libdir}/pkgconfig/bash.pc
|
|
|
|
# Clean buildhost references in Makefile.inc
|
|
sed -i -e "s,--sysroot=${STAGING_DIR_TARGET},,g" \
|
|
-e 's|${DEBUG_PREFIX_MAP}||g' \
|
|
-e 's:${HOSTTOOLS_DIR}/::g' \
|
|
-e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
|
|
${D}${libdir}/bash/Makefile.inc
|
|
}
|
|
|
|
do_install_ptest () {
|
|
make INSTALL_TEST_DIR=${D}${PTEST_PATH}/tests install-test
|
|
cp ${B}/Makefile ${D}${PTEST_PATH}
|
|
install -D ${WORKDIR}/run-bash-ptests ${D}${PTEST_PATH}/run-bash-ptests
|
|
sed -i -e 's/^Makefile/_Makefile/' -e "s,--sysroot=${STAGING_DIR_TARGET},,g" \
|
|
-e 's|${DEBUG_PREFIX_MAP}||g' \
|
|
-e "s,${S},,g" -e "s,${B},,g" -e "s,${STAGING_DIR_NATIVE},,g" \
|
|
-e 's:${HOSTTOOLS_DIR}/::g' \
|
|
-e 's:${UNINATIVE_LOADER}:${base_bindir}/false:g' \
|
|
${D}${PTEST_PATH}/Makefile
|
|
}
|
|
# The uninative loader is different on i386 & x86_64 hosts. Since it is only
|
|
# being replaced with /bin/false anyway, it doesn't need to be part of the task
|
|
# hash
|
|
do_install_ptest[vardepsexclude] += "UNINATIVE_LOADER"
|
|
|
|
pkg_postinst_${PN} () {
|
|
grep -q "^${base_bindir}/bash$" $D${sysconfdir}/shells || echo ${base_bindir}/bash >> $D${sysconfdir}/shells
|
|
}
|
|
|
|
pkg_postrm_${PN} () {
|
|
printf "$(grep -v "^${base_bindir}/bash$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
|
|
}
|
|
|
|
PACKAGES += "${PN}-bashbug"
|
|
FILES_${PN} = "${bindir}/bash ${base_bindir}/bash.bash"
|
|
FILES_${PN}-bashbug = "${bindir}/bashbug"
|
|
|
|
PACKAGE_BEFORE_PN += "${PN}-loadable"
|
|
RDEPENDS_${PN}-loadable += "${PN}"
|
|
FILES_${PN}-loadable += "${libdir}/bash/*"
|
|
|
|
RPROVIDES_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sh /bin/bash', '', d)}"
|