Make check-style.sh work on stock macOS

./tools/check-style.sh fails on stock OS X currently; this fixes it:

- use pipes directly rather than exec redirection (macOS's ancient
  version of bash fails with the latter)
- macOS's ancient bash doesn't support '\e' escapes in `echo -e`;
  replace with \033 instead
- BSD grep doesn't support GREP_COLORS, but does allow GREP_COLOR.
  Adding both doesn't hurt GNU grep: GREP_COLOR is deprecated, and won't
  be used when GREP_COLORS is set.
- BSD grep doesn't collapse multiple /'s in the listed filename, so
  failures under `include/` would should up as
  `include//pybind11/whatever.h`.  This removes the / from the include
  directory argument.

Minor other changes:
- The CRLF detection runs with -l, so GREP_COLORS wasn't doing
  anything; removed it.
- The trailing whitespace test would trigger on CRLFs, but the CR would
  result in messed up output.  Changed the test to just match trailing
  spaces and tabs, rather than all whitespace.
This commit is contained in:
Jason Rhinelander 2017-06-14 15:19:42 -04:00
parent 404bcf259d
commit d080f833be

View File

@ -19,10 +19,10 @@ errors=0
IFS=$'\n' IFS=$'\n'
found= found=
# The mt=41 sets a red background for matched tabs: # The mt=41 sets a red background for matched tabs:
exec 3< <(GREP_COLORS='mt=41' grep $'\t' include/ tests/*.{cpp,py,h} docs/*.rst -rn --color=always) GREP_COLORS='mt=41' GREP_COLOR='41' grep $'\t' include tests/*.{cpp,py,h} docs/*.rst -rn --color=always |
while read -u 3 f; do while read f; do
if [ -z "$found" ]; then if [ -z "$found" ]; then
echo -e '\e[31m\e[01mError: found tabs instead of spaces in the following files:\e[0m' echo -e '\033[31m\033[01mError: found tabs instead of spaces in the following files:\033[0m'
found=1 found=1
errors=1 errors=1
fi fi
@ -31,11 +31,10 @@ while read -u 3 f; do
done done
found= found=
# The mt=41 sets a red background for matched MS-DOS CRLF line endings grep -IUlr $'\r' include tests/*.{cpp,py,h} docs/*.rst --color=always |
exec 3< <(GREP_COLORS='mt=41' grep -IUlr $'\r' include/ tests/*.{cpp,py,h} docs/*.rst --color=always) while read f; do
while read -u 3 f; do
if [ -z "$found" ]; then if [ -z "$found" ]; then
echo -e '\e[31m\e[01mError: found CRLF characters in the following files:\e[0m' echo -e '\033[31m\033[01mError: found CRLF characters in the following files:\033[0m'
found=1 found=1
errors=1 errors=1
fi fi
@ -45,10 +44,10 @@ done
found= found=
# The mt=41 sets a red background for matched trailing spaces # The mt=41 sets a red background for matched trailing spaces
exec 3< <(GREP_COLORS='mt=41' grep '\s\+$' include/ tests/*.{cpp,py,h} docs/*.rst -rn --color=always) GREP_COLORS='mt=41' GREP_COLOR='41' grep '[[:blank:]]\+$' include tests/*.{cpp,py,h} docs/*.rst -rn --color=always |
while read -u 3 f; do while read f; do
if [ -z "$found" ]; then if [ -z "$found" ]; then
echo -e '\e[31m\e[01mError: found trailing spaces in the following files:\e[0m' echo -e '\033[31m\033[01mError: found trailing spaces in the following files:\033[0m'
found=1 found=1
errors=1 errors=1
fi fi
@ -57,10 +56,10 @@ while read -u 3 f; do
done done
found= found=
exec 3< <(grep '\<\(if\|for\|while\|catch\)(\|){' include/ tests/*.{cpp,py,h} -rn --color=always) grep '\<\(if\|for\|while\|catch\)(\|){' include tests/*.{cpp,py,h} -rn --color=always |
while read -u 3 line; do while read line; do
if [ -z "$found" ]; then if [ -z "$found" ]; then
echo -e '\e[31m\e[01mError: found the following coding style problems:\e[0m' echo -e '\033[31m\033[01mError: found the following coding style problems:\033[0m'
found=1 found=1
errors=1 errors=1
fi fi
@ -69,10 +68,10 @@ while read -u 3 line; do
done done
found= found=
exec 3< <(GREP_COLORS='mt=41' grep '^\s*{\s*$' include/ docs/*.rst -rn --color=always) GREP_COLORS='mt=41' GREP_COLOR='41' grep '^\s*{\s*$' include docs/*.rst -rn --color=always |
while read -u 3 f; do while read f; do
if [ -z "$found" ]; then if [ -z "$found" ]; then
echo -e '\e[31m\e[01mError: braces should occur on the same line as the if/while/.. statement. Found issues in the following files: \e[0m' echo -e '\033[31m\033[01mError: braces should occur on the same line as the if/while/.. statement. Found issues in the following files: \033[0m'
found=1 found=1
errors=1 errors=1
fi fi