Makefile.testshell revision da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# CDDL HEADER START
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# The contents of this file are subject to the terms of the
843e19887f64dde75055cf8842fc4db2171eff45johnlev# Common Development and Distribution License (the "License").
843e19887f64dde75055cf8842fc4db2171eff45johnlev# You may not use this file except in compliance with the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
843e19887f64dde75055cf8842fc4db2171eff45johnlev# or http://www.opensolaris.org/os/licensing.
843e19887f64dde75055cf8842fc4db2171eff45johnlev# See the License for the specific language governing permissions
843e19887f64dde75055cf8842fc4db2171eff45johnlev# and limitations under the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# When distributing Covered Code, include this CDDL HEADER in each
843e19887f64dde75055cf8842fc4db2171eff45johnlev# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
843e19887f64dde75055cf8842fc4db2171eff45johnlev# If applicable, add the following below this CDDL HEADER, with the
843e19887f64dde75055cf8842fc4db2171eff45johnlev# fields enclosed by brackets "[]" replaced with your own identifying
843e19887f64dde75055cf8842fc4db2171eff45johnlev# information: Portions Copyright [yyyy] [name of copyright owner]
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# CDDL HEADER END
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
d62bc4badc1c1f1549c961cfb8b420e650e1272byz# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
843e19887f64dde75055cf8842fc4db2171eff45johnlev# Use is subject to license terms.
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# ident "%Z%%M% %I% %E% SMI"
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# run the ksh93 minimum set of tests
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# Notes:
843e19887f64dde75055cf8842fc4db2171eff45johnlev# - "builtins.sh" may fail in some locales like this:
843e19887f64dde75055cf8842fc4db2171eff45johnlev# -- snip --
843e19887f64dde75055cf8842fc4db2171eff45johnlev# ## Running ksh test: LANG='zh_TW.EUC' script='builtins.sh'
843e19887f64dde75055cf8842fc4db2171eff45johnlev# builtins.sh[274]: printf "%T" now
843e19887f64dde75055cf8842fc4db2171eff45johnlev# -- snip --
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# - "options.sh" may currently fail in some locales with:
843e19887f64dde75055cf8842fc4db2171eff45johnlev# -- snip --
843e19887f64dde75055cf8842fc4db2171eff45johnlev# options.sh[145]: -G ** failed -- expected 'bam.c bar bar.c bar/bam.c bar/foo.c foo foo/bam.c', got 'bam.c bar bar/bam.c bar.c bar/foo.c foo foo/bam.c'
843e19887f64dde75055cf8842fc4db2171eff45johnlev# options.sh[149]: -G **/*.c failed -- expected 'bam.c bar.c bar/bam.c bar/foo.c foo/bam.c', got 'bam.c bar/bam.c bar.c bar/foo.c foo/bam.c'
843e19887f64dde75055cf8842fc4db2171eff45johnlev# -- snip --
843e19887f64dde75055cf8842fc4db2171eff45johnlev# This may be simply a different sort order or a bug in the test suite.
843e19887f64dde75055cf8842fc4db2171eff45johnlev# Currently under investigation.
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# - "io.sh" may fail due a subtle bug in ksh93 or the test suite which
d62bc4badc1c1f1549c961cfb8b420e650e1272byz# only happens when ksh93 is NOT called "ksh"; to work around the
843e19887f64dde75055cf8842fc4db2171eff45johnlev# problem the test sequence currently uses $(SRC)/cmd/ksh/$(CMDTRANSMACH)/ksh
843e19887f64dde75055cf8842fc4db2171eff45johnlev# instead of $(SRC)/cmd/ksh/$(CMDTRANSMACH)/$(PROG) until we+upstream figure
843e19887f64dde75055cf8842fc4db2171eff45johnlev# out what exactly is going wrong in this case.
843e19887f64dde75055cf8842fc4db2171eff45johnlev# -- snip --
843e19887f64dde75055cf8842fc4db2171eff45johnlev# ./close0[2]: ./close1: cannot execute [Exec format error]
843e19887f64dde75055cf8842fc4db2171eff45johnlev# io.sh[81]: picked up file descriptor zero for opening script file
843e19887f64dde75055cf8842fc4db2171eff45johnlev# -- snip --
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# - These tests need a working system clock, otherwise they'll bite you.
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# - The test frontend in this Makefile should be rewritten in ksh93
843e19887f64dde75055cf8842fc4db2171eff45johnlev# instead of the current /usr/bin/ksh (=ksh88i). This would be far less
843e19887f64dde75055cf8842fc4db2171eff45johnlev# complicated.
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# - More locales should be tested here (via ON_KSH_TEST_LOCALES below).
843e19887f64dde75055cf8842fc4db2171eff45johnlev# Locales like "ru_RU.KOI8-R","de_DE.UTF-8", "is_IS.ISO8859-1",
843e19887f64dde75055cf8842fc4db2171eff45johnlev# "is_IS.UTF-8" and "nl_BE.ISO8859-15" are on our wishlist - but
843e19887f64dde75055cf8842fc4db2171eff45johnlev# that is getting little bit more compliciated because these locales use
843e19887f64dde75055cf8842fc4db2171eff45johnlev# ',' as decimal delimter. The best solution may be to wait for ksh93
843e19887f64dde75055cf8842fc4db2171eff45johnlev# being integrated into OS/Net and then change the test sequence to
843e19887f64dde75055cf8842fc4db2171eff45johnlev# use ksh93's associate/compound variables (this may require a flag
843e19887f64dde75055cf8842fc4db2171eff45johnlev# day... ;-( ).
843e19887f64dde75055cf8842fc4db2171eff45johnlev# The current list was mainly composed to cover various encodings and
843e19887f64dde75055cf8842fc4db2171eff45johnlev# all important markets based on suggestions by Sun's i18n team.
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev# - Due to the timing sensitivity of some of the tests, these tests should
843e19887f64dde75055cf8842fc4db2171eff45johnlev# be run on a quiet system with no other activity.
843e19887f64dde75055cf8842fc4db2171eff45johnlev#
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlevTESTSRC= $(LIBSHELLSRC)/../tests
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev# ON_KSH_TEST_LOCALES can be overridden via
843e19887f64dde75055cf8842fc4db2171eff45johnlev# $ export ON_KSH_TEST_LOCALES=<value> # before $ make install #
843e19887f64dde75055cf8842fc4db2171eff45johnlevON_KSH_TEST_LOCALES = \
843e19887f64dde75055cf8842fc4db2171eff45johnlev C \
843e19887f64dde75055cf8842fc4db2171eff45johnlev en_US en_US.UTF-8 \
843e19887f64dde75055cf8842fc4db2171eff45johnlev he_IL.UTF-8 \
843e19887f64dde75055cf8842fc4db2171eff45johnlev hi_IN.UTF-8 \
843e19887f64dde75055cf8842fc4db2171eff45johnlev ja_JP.PCK ja_JP.UTF-8 ja_JP.eucJP \
843e19887f64dde75055cf8842fc4db2171eff45johnlev ko_KR.EUC \
843e19887f64dde75055cf8842fc4db2171eff45johnlev th_TH.TIS620 \
843e19887f64dde75055cf8842fc4db2171eff45johnlev zh_CN.EUC zh_CN.GBK zh_CN.GB18030 zh_CN.UTF-8 \
843e19887f64dde75055cf8842fc4db2171eff45johnlev zh_HK.BIG5HK \
843e19887f64dde75055cf8842fc4db2171eff45johnlev zh_TW.BIG5 zh_TW.EUC zh_TW.UTF-8
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev# ON_KSH_TEST_LIST can be overridden via
843e19887f64dde75055cf8842fc4db2171eff45johnlev# $ export ON_KSH_TEST_LIST=<value> # before $ make install #
843e19887f64dde75055cf8842fc4db2171eff45johnlevON_KSH_TEST_LIST = $(TESTSRC)/*.sh
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev# Flag to control whether we should make test failures non-fatal
843e19887f64dde75055cf8842fc4db2171eff45johnlevON_KSH_TEST_IGNORE_TESTFAILURE=false
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev# We must wait for other things in this subdir to finish before running
843e19887f64dde75055cf8842fc4db2171eff45johnlev# the test suite, otherwise we may run into trouble that this activity
843e19887f64dde75055cf8842fc4db2171eff45johnlev# may disturb the test suite run (resulting in weird "heisenbug"-like
843e19887f64dde75055cf8842fc4db2171eff45johnlev# test failures).
843e19887f64dde75055cf8842fc4db2171eff45johnlevtestshell: $(PROG)
843e19887f64dde75055cf8842fc4db2171eff45johnlev @ \
d62bc4badc1c1f1549c961cfb8b420e650e1272byz print '# NOTE: Make sure your binaries in ROOT match your kernel!' ; \
d62bc4badc1c1f1549c961cfb8b420e650e1272byz ( \
843e19887f64dde75055cf8842fc4db2171eff45johnlev set +o errexit ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev export PATH="$(SRC)/cmd/ksh/$(CMDTRANSMACH):/bin:/usr/bin" ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev printf "# which ksh='%s', ksh93='%s'\n" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "$$(which ksh)" "$$(which ksh93)" ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev ) ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev if [[ "$$(isalist | fgrep "$(CMDTRANSMACH)")" = "" ]] ; then \
843e19887f64dde75055cf8842fc4db2171eff45johnlev printf \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "# ISA='%s' not available on this system, skipping tests...\n" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "$(CMDTRANSMACH)" ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev exit 0 ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev fi ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev exec 2>&1 ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev (supported_locales="$$(/usr/bin/locale -a)" ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev for test_lang in $(ON_KSH_TEST_LOCALES) ; do \
843e19887f64dde75055cf8842fc4db2171eff45johnlev if [[ "$$(print "$${supported_locales}" | \
843e19887f64dde75055cf8842fc4db2171eff45johnlev egrep "^$${test_lang}\$$")" = "" ]] ; then \
843e19887f64dde75055cf8842fc4db2171eff45johnlev printf \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "# Locale '%s' not supported, skipping tests...\n" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "$${test_lang}" ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev continue ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev fi ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev (for test_item in $(ON_KSH_TEST_LIST) ; do \
843e19887f64dde75055cf8842fc4db2171eff45johnlev [[ "$${test_item}" = "$(TESTSRC)/builtins.sh" || \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "$${test_item}" = "$(TESTSRC)/options.sh" ]] || \
843e19887f64dde75055cf8842fc4db2171eff45johnlev $(ON_KSH_TEST_IGNORE_TESTFAILURE) && \
843e19887f64dde75055cf8842fc4db2171eff45johnlev set +o errexit ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev printf \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "## Running %s test: LANG='%s' script='%s'\n" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "$(CMDTRANSMACH)/ksh" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "$${test_lang}" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "$$(basename "$${test_item}")"; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev ( \
843e19887f64dde75055cf8842fc4db2171eff45johnlev test_output="$$( ( \
843e19887f64dde75055cf8842fc4db2171eff45johnlev export \
843e19887f64dde75055cf8842fc4db2171eff45johnlev SHELL="$(SRC)/cmd/ksh/$(CMDTRANSMACH)/ksh" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev LD_LIBRARY_PATH_64="$(ROOTLIB64)/" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev LD_LIBRARY_PATH_32="$(ROOTLIB)/" ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev LD_LIBRARY_PATH="$(ROOTLIB64)/:$(ROOTLIB)/" ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "$${SHELL}" "$(TESTSRC)/shtests" -t \
843e19887f64dde75055cf8842fc4db2171eff45johnlev LD_LIBRARY_PATH_64="$${LD_LIBRARY_PATH_64}" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev LD_LIBRARY_PATH_32="$${LD_LIBRARY_PATH_32}" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev LD_LIBRARY_PATH="$${LD_LIBRARY_PATH}" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev SHELL="$${SHELL}" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev LANG="$${test_lang}" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev LC_ALL="$${test_lang}" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev "$${test_item}" \
843e19887f64dde75055cf8842fc4db2171eff45johnlev ) 2>&1 | while read ; do \
843e19887f64dde75055cf8842fc4db2171eff45johnlev printf "#\t%s\n" "$${REPLY}" ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev done | tee /dev/stderr)" ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev [[ "$$(print "$${test_output}" | \
843e19887f64dde75055cf8842fc4db2171eff45johnlev egrep 'passed \[ .* tests 0 errors \]')" != "" ]] || \
843e19887f64dde75055cf8842fc4db2171eff45johnlev (print "##> test failed" ; exit 1) \
843e19887f64dde75055cf8842fc4db2171eff45johnlev ) ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev set -o errexit ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev done) ; \
843e19887f64dde75055cf8842fc4db2171eff45johnlev done)
843e19887f64dde75055cf8842fc4db2171eff45johnlev