1*01826a49SYabin Cui#! /bin/sh 2*01826a49SYabin Cui# Make sure all these programs work properly 3*01826a49SYabin Cui# when invoked with --help or --version. 4*01826a49SYabin Cui 5*01826a49SYabin Cui# Copyright (C) 2000-2016 Free Software Foundation, Inc. 6*01826a49SYabin Cui 7*01826a49SYabin Cui# This program is free software: you can redistribute it and/or modify 8*01826a49SYabin Cui# it under the terms of the GNU General Public License as published by 9*01826a49SYabin Cui# the Free Software Foundation, either version 3 of the License, or 10*01826a49SYabin Cui# (at your option) any later version. 11*01826a49SYabin Cui 12*01826a49SYabin Cui# This program is distributed in the hope that it will be useful, 13*01826a49SYabin Cui# but WITHOUT ANY WARRANTY; without even the implied warranty of 14*01826a49SYabin Cui# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*01826a49SYabin Cui# GNU General Public License for more details. 16*01826a49SYabin Cui 17*01826a49SYabin Cui# You should have received a copy of the GNU General Public License 18*01826a49SYabin Cui# along with this program. If not, see <https://www.gnu.org/licenses/>. 19*01826a49SYabin Cui 20*01826a49SYabin Cui# Ensure that $SHELL is set to *some* value and exported. 21*01826a49SYabin Cui# This is required for dircolors, which would fail e.g., when 22*01826a49SYabin Cui# invoked via debuild (which removes SHELL from the environment). 23*01826a49SYabin Cuitest "x$SHELL" = x && SHELL=/bin/sh 24*01826a49SYabin Cuiexport SHELL 25*01826a49SYabin Cui 26*01826a49SYabin Cui. "${srcdir=.}/init.sh"; path_prepend_ . 27*01826a49SYabin Cui 28*01826a49SYabin Cuiexpected_failure_status_chroot=125 29*01826a49SYabin Cuiexpected_failure_status_env=125 30*01826a49SYabin Cuiexpected_failure_status_nice=125 31*01826a49SYabin Cuiexpected_failure_status_nohup=125 32*01826a49SYabin Cuiexpected_failure_status_stdbuf=125 33*01826a49SYabin Cuiexpected_failure_status_su=125 34*01826a49SYabin Cuiexpected_failure_status_timeout=125 35*01826a49SYabin Cuiexpected_failure_status_printenv=2 36*01826a49SYabin Cuiexpected_failure_status_tty=3 37*01826a49SYabin Cuiexpected_failure_status_sort=2 38*01826a49SYabin Cuiexpected_failure_status_expr=3 39*01826a49SYabin Cuiexpected_failure_status_lbracket=2 40*01826a49SYabin Cuiexpected_failure_status_dir=2 41*01826a49SYabin Cuiexpected_failure_status_ls=2 42*01826a49SYabin Cuiexpected_failure_status_vdir=2 43*01826a49SYabin Cui 44*01826a49SYabin Cuiexpected_failure_status_cmp=2 45*01826a49SYabin Cuiexpected_failure_status_zcmp=2 46*01826a49SYabin Cuiexpected_failure_status_sdiff=2 47*01826a49SYabin Cuiexpected_failure_status_diff3=2 48*01826a49SYabin Cuiexpected_failure_status_diff=2 49*01826a49SYabin Cuiexpected_failure_status_zdiff=2 50*01826a49SYabin Cuiexpected_failure_status_zgrep=2 51*01826a49SYabin Cuiexpected_failure_status_zegrep=2 52*01826a49SYabin Cuiexpected_failure_status_zfgrep=2 53*01826a49SYabin Cui 54*01826a49SYabin Cuiexpected_failure_status_grep=2 55*01826a49SYabin Cuiexpected_failure_status_egrep=2 56*01826a49SYabin Cuiexpected_failure_status_fgrep=2 57*01826a49SYabin Cui 58*01826a49SYabin Cuitest "$built_programs" \ 59*01826a49SYabin Cui || fail_ "built_programs not specified!?!" 60*01826a49SYabin Cui 61*01826a49SYabin Cuitest "$VERSION" \ 62*01826a49SYabin Cui || fail_ "set envvar VERSION; it is required for a PATH sanity-check" 63*01826a49SYabin Cui 64*01826a49SYabin Cui# Extract version from --version output of the first program 65*01826a49SYabin Cuifor i in $built_programs; do 66*01826a49SYabin Cui v=$(env $i --version | sed -n '1s/.* //p;q') 67*01826a49SYabin Cui break 68*01826a49SYabin Cuidone 69*01826a49SYabin Cui 70*01826a49SYabin Cui# Ensure that it matches $VERSION. 71*01826a49SYabin Cuitest "x$v" = "x$VERSION" \ 72*01826a49SYabin Cui || fail_ "--version-\$VERSION mismatch" 73*01826a49SYabin Cui 74*01826a49SYabin Cuifor lang in C fr da; do 75*01826a49SYabin Cui for i in $built_programs; do 76*01826a49SYabin Cui 77*01826a49SYabin Cui # Skip `test'; it doesn't accept --help or --version. 78*01826a49SYabin Cui test $i = test && continue; 79*01826a49SYabin Cui 80*01826a49SYabin Cui # false fails even when invoked with --help or --version. 81*01826a49SYabin Cui if test $i = false; then 82*01826a49SYabin Cui env LC_MESSAGES=$lang $i --help >/dev/null && fail=1 83*01826a49SYabin Cui env LC_MESSAGES=$lang $i --version >/dev/null && fail=1 84*01826a49SYabin Cui continue 85*01826a49SYabin Cui fi 86*01826a49SYabin Cui 87*01826a49SYabin Cui args= 88*01826a49SYabin Cui 89*01826a49SYabin Cui # The just-built install executable is always named `ginstall'. 90*01826a49SYabin Cui test $i = install && i=ginstall 91*01826a49SYabin Cui 92*01826a49SYabin Cui # Make sure they exit successfully, under normal conditions. 93*01826a49SYabin Cui eval "env \$i $args --help > h-\$i " || fail=1 94*01826a49SYabin Cui eval "env \$i $args --version >/dev/null" || fail=1 95*01826a49SYabin Cui 96*01826a49SYabin Cui # Make sure they mention the bug-reporting address in --help output. 97*01826a49SYabin Cui grep "$PACKAGE_BUGREPORT" h-$i > /dev/null || fail=1 98*01826a49SYabin Cui rm -f h-$i 99*01826a49SYabin Cui 100*01826a49SYabin Cui # Make sure they fail upon `disk full' error. 101*01826a49SYabin Cui if test -w /dev/full && test -c /dev/full; then 102*01826a49SYabin Cui eval "env \$i $args --help >/dev/full 2>/dev/null" && fail=1 103*01826a49SYabin Cui eval "env \$i $args --version >/dev/full 2>/dev/null" && fail=1 104*01826a49SYabin Cui status=$? 105*01826a49SYabin Cui test $i = [ && prog=lbracket || prog=$i 106*01826a49SYabin Cui eval "expected=\$expected_failure_status_$prog" 107*01826a49SYabin Cui test x$expected = x && expected=1 108*01826a49SYabin Cui if test $status = $expected; then 109*01826a49SYabin Cui : # ok 110*01826a49SYabin Cui else 111*01826a49SYabin Cui fail=1 112*01826a49SYabin Cui echo "*** $i: bad exit status \`$status' (expected $expected)," 1>&2 113*01826a49SYabin Cui echo " with --help or --version output redirected to /dev/full" 1>&2 114*01826a49SYabin Cui fi 115*01826a49SYabin Cui fi 116*01826a49SYabin Cui done 117*01826a49SYabin Cuidone 118*01826a49SYabin Cui 119*01826a49SYabin CuibigZ_in=bigZ-in.Z 120*01826a49SYabin Cuizin=zin.gz 121*01826a49SYabin Cuizin2=zin2.gz 122*01826a49SYabin Cui 123*01826a49SYabin Cuitmp=tmp-$$ 124*01826a49SYabin Cuitmp_in=in-$$ 125*01826a49SYabin Cuitmp_in2=in2-$$ 126*01826a49SYabin Cuitmp_dir=dir-$$ 127*01826a49SYabin Cuitmp_out=out-$$ 128*01826a49SYabin Cuimkdir $tmp || fail=1 129*01826a49SYabin Cuicd $tmp || fail=1 130*01826a49SYabin Cui 131*01826a49SYabin Cuicomm_setup () { args="$tmp_in $tmp_in"; } 132*01826a49SYabin Cuicsplit_setup () { args="$tmp_in //"; } 133*01826a49SYabin Cuicut_setup () { args='-f 1'; } 134*01826a49SYabin Cuijoin_setup () { args="$tmp_in $tmp_in"; } 135*01826a49SYabin Cuitr_setup () { args='a a'; } 136*01826a49SYabin Cui 137*01826a49SYabin Cuichmod_setup () { args="a+x $tmp_in"; } 138*01826a49SYabin Cui# Punt on these. 139*01826a49SYabin Cuichgrp_setup () { args=--version; } 140*01826a49SYabin Cuichown_setup () { args=--version; } 141*01826a49SYabin Cuimkfifo_setup () { args=--version; } 142*01826a49SYabin Cuimknod_setup () { args=--version; } 143*01826a49SYabin Cui# Punt on uptime, since it fails (e.g., failing to get boot time) 144*01826a49SYabin Cui# on some systems, and we shouldn't let that stop `make check'. 145*01826a49SYabin Cuiuptime_setup () { args=--version; } 146*01826a49SYabin Cui 147*01826a49SYabin Cui# Create a file in the current directory, not in $TMPDIR. 148*01826a49SYabin Cuimktemp_setup () { args=mktemp.XXXX; } 149*01826a49SYabin Cui 150*01826a49SYabin Cuicmp_setup () { args="$tmp_in $tmp_in2"; } 151*01826a49SYabin Cui 152*01826a49SYabin Cui# Tell dd not to print the line with transfer rate and total. 153*01826a49SYabin Cui# The transfer rate would vary between runs. 154*01826a49SYabin Cuidd_setup () { args=status=noxfer; } 155*01826a49SYabin Cui 156*01826a49SYabin Cuizdiff_setup () { args="$args $zin $zin2"; } 157*01826a49SYabin Cuizcmp_setup () { zdiff_setup; } 158*01826a49SYabin Cuizcat_setup () { args="$args $zin"; } 159*01826a49SYabin Cuigunzip_setup () { zcat_setup; } 160*01826a49SYabin Cuizmore_setup () { zcat_setup; } 161*01826a49SYabin Cuizless_setup () { zcat_setup; } 162*01826a49SYabin Cuiznew_setup () { args="$args $bigZ_in"; } 163*01826a49SYabin Cuizforce_setup () { zcat_setup; } 164*01826a49SYabin Cuizgrep_setup () { args="$args z $zin"; } 165*01826a49SYabin Cuizegrep_setup () { zgrep_setup; } 166*01826a49SYabin Cuizfgrep_setup () { zgrep_setup; } 167*01826a49SYabin Cuigzexe_setup () { args="$args $tmp_in"; } 168*01826a49SYabin Cui 169*01826a49SYabin Cui# We know that $tmp_in contains a "0" 170*01826a49SYabin Cuigrep_setup () { args="0 $tmp_in"; } 171*01826a49SYabin Cuiegrep_setup () { args="0 $tmp_in"; } 172*01826a49SYabin Cuifgrep_setup () { args="0 $tmp_in"; } 173*01826a49SYabin Cui 174*01826a49SYabin Cuidiff_setup () { args="$tmp_in $tmp_in2"; } 175*01826a49SYabin Cuisdiff_setup () { args="$tmp_in $tmp_in2"; } 176*01826a49SYabin Cuidiff3_setup () { args="$tmp_in $tmp_in2 $tmp_in2"; } 177*01826a49SYabin Cuicp_setup () { args="$tmp_in $tmp_in2"; } 178*01826a49SYabin Cuiln_setup () { args="$tmp_in ln-target"; } 179*01826a49SYabin Cuiginstall_setup () { args="$tmp_in $tmp_in2"; } 180*01826a49SYabin Cuimv_setup () { args="$tmp_in $tmp_in2"; } 181*01826a49SYabin Cuimkdir_setup () { args=$tmp_dir/subdir; } 182*01826a49SYabin Cuirmdir_setup () { args=$tmp_dir; } 183*01826a49SYabin Cuirm_setup () { args=$tmp_in; } 184*01826a49SYabin Cuishred_setup () { args=$tmp_in; } 185*01826a49SYabin Cuitouch_setup () { args=$tmp_in2; } 186*01826a49SYabin Cuitruncate_setup () { args="--reference=$tmp_in $tmp_in2"; } 187*01826a49SYabin Cui 188*01826a49SYabin Cuibasename_setup () { args=$tmp_in; } 189*01826a49SYabin Cuidirname_setup () { args=$tmp_in; } 190*01826a49SYabin Cuiexpr_setup () { args=foo; } 191*01826a49SYabin Cui 192*01826a49SYabin Cui# Punt, in case GNU `id' hasn't been installed yet. 193*01826a49SYabin Cuigroups_setup () { args=--version; } 194*01826a49SYabin Cui 195*01826a49SYabin Cuipathchk_setup () { args=$tmp_in; } 196*01826a49SYabin Cuiyes_setup () { args=--version; } 197*01826a49SYabin Cuilogname_setup () { args=--version; } 198*01826a49SYabin Cuinohup_setup () { args=--version; } 199*01826a49SYabin Cuiprintf_setup () { args=foo; } 200*01826a49SYabin Cuiseq_setup () { args=10; } 201*01826a49SYabin Cuisleep_setup () { args=0; } 202*01826a49SYabin Cuisu_setup () { args=--version; } 203*01826a49SYabin Cuistdbuf_setup () { args="-oL true"; } 204*01826a49SYabin Cuitimeout_setup () { args=--version; } 205*01826a49SYabin Cui 206*01826a49SYabin Cui# I'd rather not run sync, since it spins up disks that I've 207*01826a49SYabin Cui# deliberately caused to spin down (but not unmounted). 208*01826a49SYabin Cuisync_setup () { args=--version; } 209*01826a49SYabin Cui 210*01826a49SYabin Cuitest_setup () { args=foo; } 211*01826a49SYabin Cui 212*01826a49SYabin Cui# This is necessary in the unusual event that there is 213*01826a49SYabin Cui# no valid entry in /etc/mtab. 214*01826a49SYabin Cuidf_setup () { args=/; } 215*01826a49SYabin Cui 216*01826a49SYabin Cui# This is necessary in the unusual event that getpwuid (getuid ()) fails. 217*01826a49SYabin Cuiid_setup () { args=-u; } 218*01826a49SYabin Cui 219*01826a49SYabin Cui# Use env to avoid invoking built-in sleep of Solaris 11's /bin/sh. 220*01826a49SYabin Cuikill_setup () { 221*01826a49SYabin Cui env sleep 10m & 222*01826a49SYabin Cui args=$! 223*01826a49SYabin Cui} 224*01826a49SYabin Cui 225*01826a49SYabin Cuilink_setup () { args="$tmp_in link-target"; } 226*01826a49SYabin Cuiunlink_setup () { args=$tmp_in; } 227*01826a49SYabin Cui 228*01826a49SYabin Cuireadlink_setup () { 229*01826a49SYabin Cui ln -s . slink 230*01826a49SYabin Cui args=slink; 231*01826a49SYabin Cui} 232*01826a49SYabin Cui 233*01826a49SYabin Cuistat_setup () { args=$tmp_in; } 234*01826a49SYabin Cuiunlink_setup () { args=$tmp_in; } 235*01826a49SYabin Cuilbracket_setup () { args=": ]"; } 236*01826a49SYabin Cui 237*01826a49SYabin Cui# Ensure that each program "works" (exits successfully) when doing 238*01826a49SYabin Cui# something more than --help or --version. 239*01826a49SYabin Cuifor i in $built_programs; do 240*01826a49SYabin Cui # Skip these. 241*01826a49SYabin Cui case $i in chroot|stty|tty|false|chcon|runcon) continue;; esac 242*01826a49SYabin Cui 243*01826a49SYabin Cui rm -rf $tmp_in $tmp_in2 $tmp_dir $tmp_out $bigZ_in $zin $zin2 244*01826a49SYabin Cui echo z |gzip > $zin 245*01826a49SYabin Cui cp $zin $zin2 246*01826a49SYabin Cui cp $zin $bigZ_in 247*01826a49SYabin Cui 248*01826a49SYabin Cui # This is sort of kludgey: use numbers so this is valid input for factor, 249*01826a49SYabin Cui # and two tokens so it's valid input for tsort. 250*01826a49SYabin Cui echo 2147483647 0 > $tmp_in 251*01826a49SYabin Cui # Make $tmp_in2 identical. Then, using $tmp_in and $tmp_in2 as arguments 252*01826a49SYabin Cui # to the likes of cmp and diff makes them exit successfully. 253*01826a49SYabin Cui cp $tmp_in $tmp_in2 254*01826a49SYabin Cui mkdir $tmp_dir 255*01826a49SYabin Cui # echo ================== $i 256*01826a49SYabin Cui test $i = [ && prog=lbracket || prog=$i 257*01826a49SYabin Cui args= 258*01826a49SYabin Cui if type ${prog}_setup > /dev/null 2>&1; then 259*01826a49SYabin Cui ${prog}_setup 260*01826a49SYabin Cui fi 261*01826a49SYabin Cui if eval "env \$i $args < \$tmp_in > \$tmp_out"; then 262*01826a49SYabin Cui : # ok 263*01826a49SYabin Cui else 264*01826a49SYabin Cui echo FAIL: $i 265*01826a49SYabin Cui fail=1 266*01826a49SYabin Cui fi 267*01826a49SYabin Cui rm -rf $tmp_in $tmp_in2 $tmp_out $tmp_dir 268*01826a49SYabin Cuidone 269*01826a49SYabin Cui 270*01826a49SYabin CuiExit $fail 271