68226283cb
tmux 3.3a has a behavior change, since reverted, that is incompatible with this test. Unfortunately, tmux 3.3a has already made it into some distributions, so the test has to be disabled when tmux 3.3a is encountered.
136 lines
2.5 KiB
Bash
136 lines
2.5 KiB
Bash
#!/bin/sh
|
|
|
|
#
|
|
# This is a library of subroutines mostly intended for test scripts.
|
|
#
|
|
|
|
fail()
|
|
{
|
|
printf "$@" 2>&1
|
|
exit 99
|
|
}
|
|
|
|
skip()
|
|
{
|
|
printf "$@" 2>&1
|
|
exit 77
|
|
}
|
|
|
|
sleepf()
|
|
{
|
|
(sleep .1 || sleep 1) > /dev/null 2>&1
|
|
}
|
|
|
|
seq_function()
|
|
{
|
|
if [ $# -lt 1 ] || [ $# -gt 3 ]; then
|
|
echo "bad args" >&2
|
|
fi
|
|
first=$1
|
|
incr=1
|
|
last=0
|
|
case $# in
|
|
3)
|
|
incr=$2
|
|
last=$3
|
|
;;
|
|
2)
|
|
last=$2
|
|
;;
|
|
1)
|
|
;;
|
|
esac
|
|
while :; do
|
|
printf '%d\n' "$first"
|
|
first=$(( first + incr ))
|
|
if [ "$first" -gt "$last" ]; then
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
if ! seq 1 > /dev/null 2>&1; then
|
|
seq()
|
|
{
|
|
seq_function "$@"
|
|
}
|
|
fi
|
|
|
|
chr()
|
|
{
|
|
printf '%b' "\\0$(printf %03o "$1")"
|
|
}
|
|
|
|
# If the locale is not set to a UTF-8 locale, set it to en_US.UTF-8
|
|
# or C.UTF-8.
|
|
set_locale()
|
|
{
|
|
# Test for a usable locale.
|
|
if ./is-utf8-locale 2> /dev/null; then
|
|
return 0
|
|
fi
|
|
# Attempt to find/set a usable locale.
|
|
unset LANG LC_CTYPE LC_COLLATE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LC_ALL
|
|
for i in en_US.UTF-8 en_US.utf8 C.UTF-8; do
|
|
if env LC_ALL=$i ./is-utf8-locale 2> /dev/null; then
|
|
export LC_ALL=$i
|
|
return 0
|
|
fi
|
|
done
|
|
# Fail.
|
|
return 1
|
|
}
|
|
|
|
# Given two versions, return success if the first version is less than
|
|
# or equal to the second version.
|
|
versionlte()
|
|
{
|
|
[ "$1" = "$(printf "$1\n$2\n" | sort -V | head -n1)" ]
|
|
}
|
|
versionlt() {
|
|
if [ "$1" = "$2" ]; then
|
|
return 1
|
|
fi
|
|
versionlte "$1" "$2"
|
|
}
|
|
|
|
# Tmux check.
|
|
tmux_check()
|
|
{
|
|
need_major="$1"; shift
|
|
need_minor="$1"; shift
|
|
# OpenBSD tmux does not have '-V'.
|
|
if [ "$(uname -s)" = "OpenBSD" ]; then
|
|
openbsd_major="$(uname -r)"
|
|
openbsd_major="${openbsd_major%%.*}"
|
|
if [ "${openbsd_major}" -ge 6 ]; then
|
|
return 0
|
|
fi
|
|
fi
|
|
version=$(tmux -V)
|
|
if [ $? != 0 ]; then
|
|
error "tmux unavailable\n"
|
|
return 1
|
|
fi
|
|
if [ "$version" = "tmux master" ]; then
|
|
return 0
|
|
fi
|
|
version=${version##tmux }
|
|
|
|
if versionlt "$version" "$need_major.$need_minor"; then
|
|
printf "tmux version %s too old\n" "$version" >&2
|
|
return 1
|
|
fi
|
|
# Finally, check that tmux actually works to some degree.
|
|
#
|
|
# Use a different socket name. On Cygwin, this tmux server is
|
|
# slow to exit, and the actual test tmux can attach to it, causing
|
|
# problems with missing environment variables.
|
|
tmux_check_socket=$(mktemp -d /tmp/mosh-tmux-check.XXXXXXXX)
|
|
tmux -f /dev/null -S "${tmux_check_socket}/s" -C new-session true
|
|
rv=$?
|
|
rm ${tmux_check_socket}/s
|
|
rmdir ${tmux_check_socket}
|
|
return $rv
|
|
}
|