66 lines
1.9 KiB
Bash
66 lines
1.9 KiB
Bash
#! /bin/sh
|
|
# $NetBSD: sh.test,v 1.4 2020/05/21 13:33:35 rillig Exp $
|
|
#
|
|
# Tests for the shell that is available as ${SH} in Makefiles.
|
|
#
|
|
# On platforms where /bin/sh is not good enough, pkgsrc may use
|
|
# different shells, depending on the exact situation.
|
|
#
|
|
# TOOLS_PLATFORM.sh (which ends up in SH as well) is used for running
|
|
# shell programs from mk/ and other programs that typically start with
|
|
# a #! line.
|
|
#
|
|
# The shell commands that are written in the targets of Makefiles (such
|
|
# as do-build, pre-configure) are run with a possibly different shell,
|
|
# see devel/bmake/Makefile. This shell is tested by regress/make-shell,
|
|
# which also uses this code.
|
|
|
|
set -eu
|
|
|
|
dief() {
|
|
printf 'error: [sh.test] ' 1>&2
|
|
printf "$@" 1>&2
|
|
printf '\n' 1>&2
|
|
exit 1
|
|
}
|
|
|
|
assert_that() {
|
|
case $2 in
|
|
(--equals)
|
|
[ "x$1" = "x$3" ] \
|
|
|| dief 'assertion failed: expected "%s", got "%s"' "$3" "$1"
|
|
;;
|
|
(*) dief 'wrong assert_that call: %s' "$*"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
pathname="first/second/third/fourth"
|
|
|
|
# Make sure that the usual word expansions work.
|
|
assert_that "##: ${pathname##*/}" --equals "##: fourth"
|
|
assert_that "#: ${pathname#*/}" --equals "#: second/third/fourth"
|
|
assert_that "%%: ${pathname%%/*}" --equals "%%: first"
|
|
assert_that "%: ${pathname%/*}" --equals "%: first/second/third"
|
|
|
|
# Make sure that $(...) subshells work.
|
|
assert_that "subshell: $(echo world | tr 'world' 'hello')" \
|
|
--equals "subshell: hello"
|
|
|
|
# In NetBSD 7, /bin/sh handled backslashes in word expansions incorrectly.
|
|
# See https://gnats.netbsd.org/43469.
|
|
line='#define bindir "/usr/bin" /* bar */'
|
|
case $MACHINE_PLATFORM in
|
|
(NetBSD-[0-7].*-*)
|
|
assert_that "${line%%/\**}" --equals '#define bindir "'
|
|
;;
|
|
(*)
|
|
assert_that "${line%%/\**}" --equals '#define bindir "/usr/bin" '
|
|
;;
|
|
esac
|
|
|
|
# Make sure that the shell can process empty arguments.
|
|
#
|
|
# For example, /bin/ksh on NetBSD 8 cannot, it complains with:
|
|
# ksh: @: parameter not set
|
|
sh -eu -c ': "$@"'
|