* check_warning_flags.sh: New file.

From-SVN: r132332
This commit is contained in:
Ralf Wildenhues 2008-02-15 05:50:37 +00:00 committed by Ralf Wildenhues
parent 625b6d91e7
commit 1a1f75881b
2 changed files with 140 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2008-02-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* check_warning_flags.sh: New file.
2008-01-25 Joseph Myers <joseph@codesourcery.com>
* paranoia.cc (main): Remove handling of c4x_single and

136
contrib/check_warning_flags.sh Executable file
View File

@ -0,0 +1,136 @@
#! /bin/sh
#
# Check that the warning flags documented in invoke.texi match up
# with what the compiler accepts.
#
# Copyright (C) 2008 Free Software Foundation, Inc.
# Written by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>.
#
# This script is Free Software, and it can be copied, distributed and
# modified as defined in the GNU General Public License. A copy of
# its license can be downloaded from http://www.gnu.org/copyleft/gpl.html
#
# Call this script as
# check_warning_flags.sh path/to/invoke.texi
# with CC set to the compiler to be tested.
# The script scribbles in the current directory.
progname=`echo "$0" | sed 's,.*/,,'`
usage ()
{
echo "usage: $progname path/to/invoke.texi"
echo "set \$CC to the compiler to be checked"
exit 1
}
ret=0
LC_ALL=C
export LC_ALL
: ${CC=gcc}
test $# = 1 || usage
invoke_texi=$1
test -r "$invoke_texi" || {
echo "$progname: error: cannot read '$invoke_texi'" >&2
usage
}
filebase=check_warning_flags_file$$
stderr=check_warning_flags_stderr$$
remove_problematic_flags='
/-Wlarger-than-/d
/-W[alp],/d
/-Werror/d
/-Wpadded/d
/=/d'
# Ensure that indexed warnings are accepted.
set x `sed '/^@opindex W/{
s/^@opindex /-/
'"$remove_problematic_flags"'
/-W[alp]$/d
p
}
d' <"$invoke_texi"`
shift
: >$filebase.c
$CC -c $filebase.c "$@" 2>&1 |
grep -v 'command line option.*is valid for.*but not for' >$stderr
if test -s $stderr; then
echo "options listed in @opindex but not accepted by the compiler:" >&2
cat $stderr >&2
ret=1
fi
rm -f $filebase.c $stderr
# Check documentation of warning options.
for lang in c c++ objc obj-c++; do
case $lang in
c) ext=c; langmatch='[^-]C[^+].*only' ;;
c++) ext=C; langmatch='[^-]C++.*only' ;;
objc) ext=m; langmatch='Objective-C[^+].*only' ;;
obj-c++) ext=M; langmatch='Objective-C++.*only' ;;
esac
file=$filebase.$ext
: >$file
$CC -c $file 2>$stderr
if grep 'not installed on this system' $stderr >/dev/null ||
grep 'installation problem, cannot exec' $stderr >/dev/null ||
grep 'error trying to exec' $stderr >/dev/null
then
echo "$progname: $CC is not configured for language $lang, skipping checks" >&2
rm -f $file $filebase.o $filebase.obj $stderr
continue
fi
# Verify good warning flags.
set x `sed '
t a
:a
/^@item -W/{
/'"$langmatch"'/b x
/ only)/d
b x
}
d
:x
'"$remove_problematic_flags"'
s/^@item //
s/ .*//
' <"$invoke_texi"`
shift
$CC -c $file -O "$@" 2>$stderr
if test -s $stderr; then
echo failures: >&2
cat $stderr >&2
ret=1
fi
# Verify bad warning flags.
set x `sed '
t a
:a
/^@item -W/{
/ only)/!d
/'"$langmatch"'/d
b x
}
d
:x
'"$remove_problematic_flags"'
s/^@item //
s/ .*//
' <"$invoke_texi"`
shift
$CC -c $file -O "$@" 2>$stderr
# cat $stderr >&2
test $# = `grep 'command line option.*valid.*but not for' <$stderr | wc -l` || {
for warning
do
grep "command line option.*$warning.*valid" <$stderr >&2 ||
echo "valid for $lang but not annotated as such: $warning"
done
ret=1
}
rm -f $file $filebase.o $filebase.obj $stderr
done
exit $ret