#!/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/\|^src/vendorcode/\|^Documentation/\|^build/\|^3rdparty/\|^\.git/\|^coreboot-builds/\|^util/nvidia/cbootimage'
EXCLUDED_FILES='to-wiki/towiki\.sh$\|vga/vga_font\|video/font\|PDCurses.*x11'
EXCLUDED_PHRASES='Copyright\|Ported to\|Intel®\|°C\|°F\|Athlon™\|Copyright.*©\|A-Za-zÀ-ÿ'

# 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

# 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.
grep -n "[^	 -~]" \
	$(${FIND_FILES} | sed 's|^\./||' | sort | \
		grep "$INCLUDED_FILES" | \
		grep -v "$EXCLUDED_DIRS" | \
		grep -v "$EXCLUDED_FILES") | \
	grep -iv "$EXCLUDED_PHRASES" | \
	grep --color='auto' "[^	 -~]"
