blob: 92addcda7c22fb08e2716bdae33f7ddf9ce41396 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#!/bin/sh
# build-aux/lint-generic - Non-language-specific lint checks
#
# Copyright (C) 2024-2025 Luke T. Shumaker <lukeshu@lukeshu.com>
# SPDX-License-Identifier: AGPL-3.0-or-later
RED=$(tput setaf 1)
RESET=$(tput sgr0)
err() {
printf "${RED}%s${RESET}: %s\n" "$1" "$2" >&2
r=1
}
r=0
for filename in "$@"; do
if ! { [ -f "$filename" ] && ! [ -h "$filename" ]; }; then
# Ignore non-files
continue
fi
# File header ##########################################################
shebang="$(sed -n '1{/^#!/{/^#!\/hint\//q; p;};}' "$filename")"
if [ -x "$filename" ] && [ -z "$shebang" ]; then
err "$filename" 'is executable but does not have a shebang'
elif [ -n "$shebang" ] && ! [ -x "$filename" ]; then
err "$filename" 'has a shebang but is executable'
fi
if ! grep -E -q 'Copyright \(C\) 202[4-9]((-|, )202[5-9])* Luke T. Shumaker' "$filename"; then
err "$filename" 'is missing a copyright statement'
fi
if ! grep -q ' SPDX-License-Identifier[:] ' "$filename"; then
err "$filename" 'is missing an SPDX-License-Identifier'
fi
dscname_act=$(./build-aux/get-dscname "$filename")
dscname_exp=$(echo "$filename" | sed \
-e 's,.*/config/,,' \
-e 's,.*/config\.h$,config.h,' \
-e 's,.*include/,,' \
-e 's,.*static/,,' \
-e 's/\.wip$//')
if [ "$dscname_act" != "$dscname_exp" ] && [ "cmd/$dscname_act" != "$dscname_exp" ]; then
err "$filename" "self-identifies as $dscname_act (expected $dscname_exp)"
fi
# File body ############################################################
if grep -n --color=auto "$(printf '\\S\t')" "$filename"; then
err "$filename" 'uses tabs for alignment'
fi
done
exit $r
|