#!/usr/bin/env sh
#
# SPDX-License-Identifier: GPL-2.0-only

# DESCR: Check that files end with a single newline

LC_ALL=C export LC_ALL

PIDS=""
INCLUDED_DIRS_AND_FILES='util/* src/* payloads/* configs/* Makefile *.inc'
EXCLUDED_DIRS='src/vendorcode/\|cbfstool/lzma/\|cbfstool/lz4/\|Documentation/\|build/\|3rdparty/\|\.git/\|coreboot-builds/\|util/nvidia/cbootimage/'
EXCLUDED_FILES='\.jpg$\|\.cksum$\|\.bin$\|\.vbt$\|\.hex$\|\.ico$\|\.o$\|\.bz2$\|\.xz$\|^.tmpconfig\|\.pyc$\|_shipped$\|sha256$\|\.png$\|\.patch$'

# Use git ls-files if the code is in a git repo, otherwise use find.
if [ -n "$(command -v git)" ] && \
	[ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]
then
	FIND_FILES="git ls-files"
else
	FIND_FILES="find"
fi

HAVE_FILE=$(command -v file 1>/dev/null 2>&1; echo $?)

is_eligible_executable() {
	if [ "$HAVE_FILE" -ne 0 ]; then
		return 1
	fi
	if { LC_ALL=C; file --brief "$filename" | grep -Eqw \
		"^(Bourne shell|POSIX shell|Perl|Python) script"; };
	then
		return 0
	else
		return 1
	fi
}

test_for_final_newline() {
	while read filename; do
		# Only check regular files and script executables
		if [ -f "$filename" ] && { [ ! -x "$filename" ] || \
			is_eligible_executable "$filename"; };
		then
			# Verify that there is a newline at the end
			# $() strips trailing newlines
			if [ -n "$(tail -c 1 "$filename")" ]; then
				echo "$filename has no final newline."

			# Verify that the file ends with only a single newline
			# and that the file isn't empty
			elif [ -z "$(tail -c 2 "$filename")" ] && \
			     [ -n "$(head -n 5 "$filename")" ]; then
				echo "$filename has multiple final newlines."
			fi
		fi
	done
}

for directory in $INCLUDED_DIRS_AND_FILES ; do
	${FIND_FILES} ${directory} | sed 's|^\./||' | sort | \
		grep -v "$EXCLUDED_DIRS" | \
		grep -v "$EXCLUDED_FILES" | \
		test_for_final_newline &
	PIDS="$PIDS $!"
done

# wait for tests to finish.
for pid in $PIDS; do
	wait "$pid"
done
