#!/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='\.gif$\|\.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
