mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
111 lines
2.9 KiB
Bash
Executable file
111 lines
2.9 KiB
Bash
Executable file
#!/bin/sh
|
|
# Verifies the coding style conventions are adhered to.
|
|
|
|
RESULT=true
|
|
|
|
complain() {
|
|
echo "$1 $2"
|
|
}
|
|
|
|
check_trailing_whitespace() {
|
|
grep -q -E '( | )+$' -- "$1"
|
|
}
|
|
|
|
check_tabs_following_spaces() {
|
|
grep -q -E '^( | )* + ' -- "$1"
|
|
}
|
|
|
|
check_trailing_blank_lines() {
|
|
[ "$(cat -- "$1" | wc -l)" != "0" ] &&
|
|
[ -z "$(tail -1 -- "$1")" ]
|
|
}
|
|
|
|
grep_copyright_header_full() {
|
|
grep -m 1 -A 100 -E '^/\*+$' |
|
|
grep -m 1 -B 100 -E '^\*+/$'
|
|
}
|
|
|
|
grep_copyright_header_contents() {
|
|
grep -v -E '^/\*+$' |
|
|
grep -v -E '^\*+/$'
|
|
}
|
|
|
|
has_leading_tabs() {
|
|
grep -q -E '^ +'
|
|
}
|
|
|
|
has_bsd_tag() {
|
|
grep -q -E '/\*[[:space:]]*\$.*\$[[:space:]]*\*/'
|
|
}
|
|
|
|
verify_source() {
|
|
FILE="$1"
|
|
if ! cat -- "$FILE" | has_bsd_tag &&
|
|
! grep -q -- "Permission to use, copy, modify, and distribute this software for any" "$FILE" &&
|
|
! grep -q -- "$FILE" "$FILE"; then
|
|
complain "$PWD/$FILE" "doesn't contain its own file path"
|
|
RESULT=false
|
|
fi
|
|
if ! grep -q -i -E 'copyright|public domain' -- "$FILE"; then
|
|
complain "$PWD/$FILE" "doesn't have a copyright statement"
|
|
RESULT=false
|
|
fi
|
|
if grep -q COPYRIGHT -- "$FILE" ||
|
|
grep -q -E '^/\*{78}$' -- "$FILE" ||
|
|
grep -q -E '^\*{78}/$' -- "$FILE"; then
|
|
complain "$PWD/$FILE" "has an obsolete copyright statement"
|
|
RESULT=false
|
|
fi
|
|
if grep -q -E '^/\*{80}$' -- "$FILE" ||
|
|
grep -q -E '^/\*{80}$' -- "$FILE"; then
|
|
complain "$PWD/$FILE" "has a spurious copyright statement"
|
|
RESULT=false
|
|
fi
|
|
if cat -- "$FILE" |
|
|
grep_copyright_header_full |
|
|
grep_copyright_header_contents |
|
|
has_leading_tabs; then
|
|
complain "$PWD/$FILE" "has tabs in its copyright statement"
|
|
RESULT=false
|
|
fi
|
|
if check_trailing_whitespace "$FILE"; then
|
|
complain "$PWD/$FILE" "has trailing whitespace"
|
|
RESULT=false
|
|
fi
|
|
if check_tabs_following_spaces "$FILE"; then
|
|
complain "$PWD/$FILE" "has tabs following spaces"
|
|
RESULT=false
|
|
fi
|
|
if check_trailing_blank_lines "$FILE"; then
|
|
complain "$PWD/$FILE" "has trailing blank lines"
|
|
RESULT=false
|
|
fi
|
|
if echo "$FILE" | grep -Eq 'include' &&
|
|
grep -E '^#(define|ifndef)' -- "$FILE" | head -2 | grep -q ' '; then
|
|
complain "$PWD/$FILE" "has tabs in include guards"
|
|
RESULT=false
|
|
fi
|
|
# TODO: Wrong include guards.
|
|
# TODO: Include guards being set to 1.
|
|
$RESULT
|
|
}
|
|
|
|
# TODO: Some of these patterns should also apply to build-aux, and maybe also
|
|
# partially to libm. Makefile and kblayout should also not have whitespace
|
|
# problems.
|
|
for MODULE in $(git ls-files | grep / | sed 's,/.*,,' | sort -u | grep -Ev '^(build-aux|doc|etc|libm|share)$'); do
|
|
cd "$MODULE"
|
|
for FILE in $(git ls-files | grep -Ev '^include/' | grep -Ev '((^|/)(Makefile|\.gitignore|tixbuildinfo)|\.([0-9]|kblayout|f16|rgb))$'); do
|
|
verify_source "$FILE"
|
|
done
|
|
if [ -e "$MODULE/include" ]; then
|
|
cd include
|
|
for FILE in $(cd $MODULE/include && git ls-files); do
|
|
verify_source "$FILE"
|
|
done
|
|
cd ..
|
|
fi
|
|
cd ..
|
|
done
|
|
|
|
$RESULT
|