libtool/tests/sh.test
Ralf Wildenhues f470f5557b * libltdl/m4/libtool.m4 (_LT_PROG_XSI_SHELLFNS): Move non-XSI
definition of func_dirname_and_basename ...
* libltdl/config/general.m4sh (func_dirname_and_basename):
... here, to use it for the other scripts that use general.m4sh
(and as portable fallback for libtool).  Add marker for early
insertion of generated shell functions (into libtool, not the
other scripts) here.
Use func_dirname_and_basename to compute progname, progpath.
* libltdl/config/ltmain.m4sh (func_mode_help): Remove marker
for insertion of generated shell functions.
* tests/sh.test: Adjust function definition test to not match
function call.
2008-04-10 21:18:02 +00:00

135 lines
3.9 KiB
Bash
Executable File

#! /bin/sh
# sh.test - check for some nonportable or dubious or undesired shell
# constructs in shell scripts.
#
# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Free Software
# Foundation, Inc.
# Written by Gary V. Vaughan, 2003
#
# This file is part of GNU Libtool.
#
# GNU Libtool 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 2 of
# the License, or (at your option) any later version.
#
# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
# can be downloaded from http://www.gnu.org/licenses/gpl.html,
# or obtained by writing to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
####
. tests/defs || exit 1
# Check all the "portable" shell scripts.
status=$EXIT_SUCCESS
# Check for bad binary operators.
if $EGREP -n -e 'if[ ]+["'\'']?\\$[^ ]+[ ]+(=|-[lg][te]|-eq|-ne)' $scripts; then
echo "use \`if test \$something =' instead of \`if \$something ='"
status=$EXIT_FAILURE
fi
# Check for bad unary operators.
if $EGREP -n -e 'if[ ]+-' $scripts; then
echo "use \`if test -X' instead of \`if -X'"
status=$EXIT_FAILURE
fi
# Check for using `[' instead of `test'.
if $EGREP -n -e 'if[ ]+\[' $scripts; then
echo "use \`if test' instead of \`if ['"
status=$EXIT_FAILURE
fi
# Check for using test X... instead of test "X...
if $EGREP -n -e 'test[ ]+(![ ])?(-.[ ]+)?X' $scripts; then
echo "use \`test \"X...\"' instead of \`test X'"
status=$EXIT_FAILURE
fi
# Check for using test $... instead of test "$...
if $EGREP -n -e 'test[ ]+(![ ])?(-.[ ]+)?X?\$' $scripts; then
echo "use \`test \"\$...\"' instead of \`test \$'"
status=$EXIT_FAILURE
fi
# Never use test -e.
if $EGREP -n -e 'test[ ]+(![ ])?-e' $scripts; then
echo "use \`test -f' instead of \`test -e'"
status=$EXIT_FAILURE
fi
# Check for uses of Xsed without corresponding echo "X
if $EGREP -n -e '\$Xsed' $scripts | $EGREP -v -n -e '\$ECHO \\*"X'; then
echo "occurrences of \`\$Xsed\' without \`echo \"X\' on the same line"
status=$EXIT_FAILURE
fi
# Check for quotes within backquotes within quotes "`"bar"`"
if $EGREP -n -e '"[^`"]*`[^"`]*"[^"`]*".*`[^`"]*"' $scripts | \
$EGREP -v "### testsuite: skip nested quoting test$"; then
echo "nested quotes are dangerous"
status=$EXIT_FAILURE
fi
# Check for using set -- instead of set dummy
if $EGREP -n -e 'set[ ]+--[ ]+' $scripts; then
echo "use \`set dummy ...' instead of \`set -- ...'"
status=$EXIT_FAILURE
fi
# Check for using shift after set dummy (same or following line).
for s in $scripts
do
if $SED -n '
/set[ ][ ]*dummy/{
/set.*dummy.*;.*shift/d
N
/\n.*shift/D
p
}' "$s" | $EGREP .; then
echo "use \`shift' after \`set dummy' in $s"
status=$EXIT_FAILURE
fi
done
# Check for opening brace on next line in shell function definition.
# redirect stderr so we also barf when sed issues diagnostics.
for s in $scripts
do
if $SED -n '
/^func_.*(/{
N
/^func_[^ ]* ()\n{$/d
p
}' "$s" 2>&1 | $EGREP .; then
echo "Function definitions should look like this in $s:
func_foo ()
{
# ...
}"
status=$EXIT_FAILURE
fi
done
# Check for correct usage of $cc_basename.
# redirect stderr so we also barf when sed issues diagnostics.
for s in "$m4dir/libtool.m4"
do
if $SED -n '/case \$cc_basename in/,/esac/ {
/^[ ]*[a-zA-Z][a-zA-Z0-9+]*[^*][ ]*)/p
}' $s 2>&1 | $EGREP .; then
echo "\$cc_basename matches should include a trailing \`*' in $s."
status=$EXIT_FAILURE
fi
done
exit $status