#!/bin/sh
# This file is part of the coreboot project.
#
# Copyright (C) 2016 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# DESCR: Check for non-ASCII and unprintable characters

LC_ALL=C export LC_ALL

INCLUDED_FILES='\.[chsS]$\|\.asl$\|\.cb$\|\.inc$\|Kconfig\|\.ld$|\.txt\|\.hex'
EXCLUDED_DIRS='^payloads/external/\|^src/vendorcode/\|^Documentation/'
EXCLUDED_FILES='to-wiki/towiki\.sh$\|vga/vga_font\|video/font\|PDCurses.*x11'
EXCLUDED_PHRASES='Copyright\|Ported to\|Intel®\|°C\|°F\|Athlon™\|Copyright.*©'

# Exit if git isn't present or the code isn't in a git repo
if [ -z "$(command -v git)" ] || \
	[ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" != "true" ]
then
	exit
fi

# 1. Get the list of files to parse and send them through grep
# 2. Find any characters that aren't TAB, or space (0x20) to ~ (0x7F)
#    LF (0x10) isn't included, as it ends the grep line
# 3. Remove common phrases and names that have been found
# 4. Run the result through grep again to highlight the issues that were
#    found.  Without this step, the characters can be difficult to see.
# shellcheck disable=SC2046
git grep -lP "[^\t-~]" | \
	grep "$INCLUDED_FILES" | \
	grep -v "$EXCLUDED_DIRS" | \
	grep -v "$EXCLUDED_FILES" | \
	xargs -I % \
		grep -n "[^	 -~]" % | \
		grep -iv "$EXCLUDED_PHRASES" | \
		grep --color='auto' "[^	 -~]"
