#!/bin/bash

# ---HELP---
# to check kernel coding style of file(s):
# a) either pass a filename as cmdline parameter
# b) run without cmdline parameters and check all non third-party code
# ---HELP---

READLINK=$(which greadlink)
[ -z "$READLINK" ] && {
	READLINK=$(which readlink)
}
SCRIPT_DIR=$(dirname "$($READLINK -f "$0")")
SCRIPT_FILE="$SCRIPT_DIR/check-coding-files.txt"
SOURCE_DIR_NAMES="rtrlib tools tests"
EXIT_CODE=0
if [ -z "$1" ] ; then
    for dir in ${SOURCE_DIR_NAMES}; do
        normalized_dir=$($READLINK -f "${SCRIPT_DIR}/../${dir}")
        CHECKSOURCE+=" $(find ${normalized_dir} -name '*.c' -or -name '*.h')"
    done
else
	CHECKSOURCE=$($READLINK -f "$1")
fi
cd $SCRIPT_DIR/..
for i in $CHECKSOURCE; do
	echo "> check coding style of $i ..."
    IGNORE="PREFER_KERNEL_TYPES,CONST_STRUCT,OPEN_BRACE,SPDX_LICENSE_TAG,OPEN_ENDED_LINE,UNNECESSARY_PARENTHESES,PREFER_PRINTF,GLOBAL_INITIALISERS,PREFER_PACKED,BOOL_MEMBER,STATIC_CONST_CHAR_ARRAY,LONG_LINE_STRING"
    if [[ $i == *"unittest"* ]] || [[ $i == *"bgpsec"* ]]; then
        IGNORE="${IGNORE},CAMELCASE"
    fi
        $SCRIPT_DIR/checkpatch.pl -f --strict --no-tree --terse --show-types \
               --max-line-length 120 --ignore ${IGNORE} $i

	if [ $? -ne "0" ]; then
		EXIT_CODE=1
	fi
done

exit $EXIT_CODE
