#! /bin/sh # Make sure all these programs work properly # when invoked with --help or --version. # Copyright (C) 2000-2009 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . test "$VERBOSE" = yes && set -x # Ensure that $SHELL is set to *some* value and exported. # This is required for dircolors, which would fail e.g., when # invoked via debuild (which removes SHELL from the environment). test "x$SHELL" = x && SHELL=/bin/sh export SHELL . $srcdir/test-lib.sh expected_failure_status_chroot=125 expected_failure_status_env=125 expected_failure_status_nice=125 expected_failure_status_nohup=125 expected_failure_status_stdbuf=125 expected_failure_status_su=125 expected_failure_status_timeout=125 expected_failure_status_printenv=2 expected_failure_status_tty=3 expected_failure_status_sort=2 expected_failure_status_expr=3 expected_failure_status_lbracket=2 expected_failure_status_dir=2 expected_failure_status_ls=2 expected_failure_status_vdir=2 test "$built_programs" \ || { echo "$this_test: no programs built!?!" 1>&2; Exit 1; } for lang in C fr da; do for i in $built_programs; do # Skip `test'; it doesn't accept --help or --version. test $i = test && continue; # false fails even when invoked with --help or --version. if test $i = false; then env LC_MESSAGES=$lang $i --help >/dev/null && fail=1 env LC_MESSAGES=$lang $i --version >/dev/null && fail=1 continue fi # The just-built install executable is always named `ginstall'. test $i = install && i=ginstall # Make sure they exit successfully, under normal conditions. env $i --help > h-$i || fail=1 env $i --version >/dev/null || fail=1 # Make sure they mention the bug-reporting address in --help output. grep "$PACKAGE_BUGREPORT" h-$i > /dev/null || fail=1 rm -f h-$i # Make sure they fail upon `disk full' error. if test -w /dev/full && test -c /dev/full; then env $i --help >/dev/full 2>/dev/null && fail=1 env $i --version >/dev/full 2>/dev/null && fail=1 status=$? test $i = [ && prog=lbracket || prog=$i eval "expected=\$expected_failure_status_$prog" test x$expected = x && expected=1 if test $status = $expected; then : # ok else fail=1 echo "*** $i: bad exit status \`$status' (expected $expected)," 1>&2 echo " with --help or --version output redirected to /dev/full" 1>&2 fi fi done done tmp=tmp-$$ tmp_in=in-$$ tmp_in2=in2-$$ tmp_dir=dir-$$ tmp_out=out-$$ mkdir $tmp || fail=1 cd $tmp || fail=1 comm_args="$tmp_in $tmp_in" csplit_args="$tmp_in //" cut_args='-f 1' join_args="$tmp_in $tmp_in" tr_args='a a' chmod_args="a+x $tmp_in" # Punt on these. chgrp_args=--version chown_args=--version mkfifo_args=--version mknod_args=--version # Punt on uptime, since it fails (e.g., failing to get boot time) # on some systems, and we shouldn't let that stop `make check'. uptime_args=--version # Create a file in the current directory, not in $TMPDIR. mktemp_args=mktemp.XXXX cmp_args="$tmp_in $tmp_in2" # Tell dd not to print the line with transfer rate and total. # The transfer rate would vary between runs. dd_args=status=noxfer diff_args="$tmp_in $tmp_in2" sdiff_args="$tmp_in $tmp_in2" diff3_args="$tmp_in $tmp_in2 $tmp_in2" cp_args="$tmp_in $tmp_in2" ln_args="$tmp_in ln-target" ginstall_args="$tmp_in $tmp_in2" mv_args="$tmp_in $tmp_in2" mkdir_args=$tmp_dir/subdir rmdir_args=$tmp_dir rm_args=$tmp_in shred_args=$tmp_in touch_args=$tmp_in2 truncate_args="--reference=$tmp_in $tmp_in2" basename_args=$tmp_in dirname_args=$tmp_in expr_args=foo # Punt, in case GNU `id' hasn't been installed yet. groups_args=--version pathchk_args=$tmp_in yes_args=--version logname_args=--version nohup_args=--version printf_args=foo seq_args=10 sleep_args=0 su_args=--version stdbuf_args="-oL true" timeout_args=--version # I'd rather not run sync, since it spins up disks that I've # deliberately caused to spin down (but not unmounted). sync_args=--version test_args=foo # This is necessary in the unusual event that there is # no valid entry in /etc/mtab. df_args=/ # This is necessary in the unusual event that getpwuid (getuid ()) fails. id_args=-u # Use env to avoid invoking built-in sleep of Solaris 11's /bin/sh. env sleep 10m & kill_args=$! link_args="$tmp_in link-target" unlink_args=$tmp_in ln -s . slink readlink_args=slink stat_args=$tmp_in unlink_args=$tmp_in lbracket_args=": ]" # Ensure that each program "works" (exits successfully) when doing # something more than --help or --version. for i in $built_programs; do # Skip these. case $i in chroot|stty|tty|false|chcon|runcon) continue;; esac rm -rf $tmp_in $tmp_in2 $tmp_dir $tmp_out echo > $tmp_in echo > $tmp_in2 mkdir $tmp_dir # echo ================== $i test $i = [ && prog=lbracket || prog=$i eval "args=\$${prog}_args" if env $i $args < $tmp_in > $tmp_out; then : # ok else echo FAIL: $i fail=1 fi rm -rf $tmp_in $tmp_in2 $tmp_out $tmp_dir done Exit $fail