blob: c5e72e9c34c517813c9649405c2e4fd5d864bc29 [file] [log] [blame]
#!/bin/bash
#
# This script scans the whole source code for symbols of the form
# 'xxx(yyy' where:
# xxx is either TRACE, WARN, ERR or WARN
# yyy is a C identifier
# It outputs on the standard output a sorted list of the
# yyy identifiers found in the .c files.
# Each identifier is reported once. Header files are not scanned.
#
# The script can be given an argument that specify the files to be
# searched according to the following scheme:
# - if the argument does not contain a slash (/), the script
# will search the tree rooted in the current directory for
# files that match that description. You can also pass
# wildcard arguments, but remember to quote them to prevent
# expansion by the shell
# - if the argument does contain a slash, only that file is
# searched
# - if no argument is given, the argument defaults to "*.c"
# that is, all C files are searched.
# - if more than a argument is given, only the listed files are
# searched. Note that in this case, the script will not
# attempt to find them in some subdirectories, but rather
# it will try to open them in the current directory.
# Thus, if you want to disable the automatic searching when the file
# name does not contain a /, either prefix the filename with ./
# or add /dev/null as another argument.
#
# Dimitrie O. Paun <dimi@cs.toronto.edu>
#
case "$#" in
0 | 1) files=${1:-'*.c'}
if [ ${files#*/} = "$files" ]; then
files=$(find . -name "$files" -print)
fi;;
* ) files="$@";;
esac
(
grep -h "TRACE *(" $files /dev/null | \
sed 's/.*TRACE *( *\([A-Za-z0-9_]*\).*/\1/g'
grep -h "ERR *(" $files /dev/null | \
sed 's/.*ERR *( *\([A-Za-z0-9_]*\).*/\1/g'
grep -h "FIXME *(" $files /dev/null | \
sed 's/.*FIXME *( *\([A-Za-z0-9_]*\).*/\1/g'
grep -h "WARN *(" $files /dev/null | \
sed 's/.*WARN *( *\([A-Za-z0-9_]*\).*/\1/g'
) | sort | uniq