mirror of
git://git.savannah.gnu.org/libtool.git
synced 2024-11-27 06:09:57 +08:00
f470f5557b
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.
135 lines
3.9 KiB
Bash
Executable File
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
|