#!/bin/sh

# Echo the name of every argument of this script that is not "perfect"
# according to coccinelle's --parse-c.
#
# If $TOR_COCCI_EXCEPTIONS_FILE is non-empty, skip any files that match the
# patterns in the exception file, according to "grep -f"
#
# If VERBOSE is non-empty, log spatch errors and skipped files.

top="$(dirname "$0")/../.."

exitcode=0

for fn in "$@"; do

    if test "${TOR_COCCI_EXCEPTIONS_FILE}" ; then
        skip_fn=$(echo "$fn" | grep -f "${TOR_COCCI_EXCEPTIONS_FILE}")
        if test "${skip_fn}" ; then
            if test "${VERBOSE}" != ""; then
                echo "Skipping '${skip_fn}'"
            fi
            continue
        fi
    fi

    if spatch --macro-file-builtins \
              "$top"/scripts/coccinelle/tor-coccinelle.h \
              --defined COCCI \
              --parse-c "$fn" \
              2>/dev/null | grep "perfect = 1" > /dev/null; then
        : # it's perfect
    else
        echo "$fn"
        if test "${VERBOSE}" != ""; then
            spatch --macro-file-builtins \
                   "$top"/scripts/coccinelle/tor-coccinelle.h \
                   --defined COCCI \
                   --parse-c "$fn"
        fi
        exitcode=1
    fi

done

exit "$exitcode"