Hailiang 5721ba8adc add sw_64 support
(cherry picked from commit 3037fb149ec6d6a9a898b0e5625cbf3ad2709be4)
2025-03-17 10:59:58 +08:00

104 lines
2.7 KiB
Bash

#! /bin/sh
# Unit test helper.
# This is free software. There is NO warranty; not even for
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Copyright (C) 2015-2019, 2021 Bootstrap Authors
#
# This file is dual licensed under the terms of the MIT license
# <https://opensource.org/license/MIT>, and GPL version 2 or later
# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
# these licenses when using or redistributing this software or any of
# the files within it. See the URLs above, or the file `LICENSE`
# included in the Bootstrap distribution for the full license texts.
# Please report bugs or propose patches to:
# <https://github.com/gnulib-modules/bootstrap/issues>
# This shell snippet (when sourced) tries to find as many /bin/sh compatible
# shells as possible on tested box -- and then re-executes the calling script
# in all of them. At the end, the default shell (/bin/sh usually) is also
# tested.
#
# To write compatible test-case, you usually need only those lines:
#
# #! /bin/sh
#
# all_shells_script=$0
# . "$abs_srcdir/test-all-shells.sh"
#
# your_check && all_shells_error "failed your_check"
#
# $all_shells_exit_cmd
# List of shells we try to check in.
: ${GL_ALL_SHELLS='ash bash dash ksh ksh88 mksh zsh busybox'}
# List of directories to search for the shell interpreter.
: ${GL_ALL_SHELLS_DIRS='/bin /sbin'}
# List of shell emulations to test with BusyBox.
: ${GL_ALL_SHELLS_BBE='sh ash'}
. "$abs_aux_dir"/funclib.sh || exit 1
all_shells_exit_cmd=:
: ${all_shells_script=false}
all_shells_error ()
{
$ECHO "error: $*" >&2
all_shells_exit_cmd=false
}
__notify_shell ()
{
$ECHO "== running in '$*' ==" >&2
}
__reexec_in_all_shells ()
{
for _G_dir in $GL_ALL_SHELLS_DIRS
do
for _G_shell in $GL_ALL_SHELLS
do
_G_abs_shell=$_G_dir/$_G_shell
test -f "$_G_abs_shell" || continue
case $_G_abs_shell in
*busybox)
for _G_bbe in $GL_ALL_SHELLS_BBE
do
_G_full_bb="$_G_abs_shell $_G_bbe"
__notify_shell "$_G_full_bb"
__GL_ALL_SHELLS_SHELL="$_G_full_bb" \
"$_G_abs_shell" "$_G_bbe" "$all_shells_script" ${1+"$@"} \
|| all_shells_error "can't run in $_G_bbe"
done
;;
*)
__notify_shell "$_G_abs_shell"
__GL_ALL_SHELLS_SHELL="$_G_abs_shell" \
"$_G_abs_shell" "$all_shells_script" ${1+"$@"} \
|| all_shells_error "can't run in $_G_abs_shell"
;;
esac
done
done
}
test x = "x$__GL_ALL_SHELLS_SHELL" \
&& __reexec_in_all_shells ${1+"$@"} \
&& __notify_shell "default shell"
: