summaryrefslogtreecommitdiff
path: root/util/lint/lint-000-license-headers
blob: 44657d27c900f0f104f7c807d9dede1ad4ee68c2 (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/usr/bin/env sh
#
# SPDX-License-Identifier: GPL-2.0-only

# DESCR: Check that files in have valid license headers
# $1 is an optional command line parameter containing directories to check


LINTDIR="$(
  cd -- "$(dirname "$0")" > /dev/null 2>&1 || return
  pwd -P
)"

# shellcheck source=helper_functions.sh
. "${LINTDIR}/helper_functions.sh"

# regex list of files and directories to exclude from the search
HEADER_EXCLUDED="\
^src/commonlib/bsd/lz4.c.inc\$|\
^src/cpu/x86/16bit/entry16.inc\$|\
^src/device/oprom/x86emu/|\
^src/device/oprom/include/x86emu/|\
^src/device/oprom/yabel/|\
^src/drivers/net/ne2k.c\$|\
^src/drivers/xgi/common/initdef.h\$|\
^src/drivers/xgi/common/vstruct.h\$|\
^src/lib/gnat/|\
^src/lib/lzmadecode.[ch]\$|\
^src/lib/stack.c\$|\
^src/sbom/TAGS|\
^src/vendorcode/|\
^tests/data/|\
^util/amdtools/example_input/|\
^util/cbfstool/lzma/|\
^util/cbfstool/lz4/|\
^util/kconfig/|\
Kconfig|\
\<COPYING\>|\
\<LICENSE\>|\
\<README\>|\
Changelog|\
AUTHORS|\
TODO|\
EXAMPLE|\
NEWS|\
ChangeLog|\
Dockerfile|\
\.gitignore$|\
\.in$|\
\.[18]$|\
\.md$|\
\.wiki$|\
\.xxdump$|\
\.spec$|\
\.txt$|\
\.jpg$|\
\.cksum$|\
\.bin$|\
\.vbt$|\
\.hex$|\
\.patch$|\
_shipped$|\
/microcode-[^/]*.h$|\
/sdram-.*\.inc$|\
\.fmd|\
\.cb|\
\.cfg$|\
\.spd|\
config|\
cmos\.layout|\
cmos\.default|\
\.apcb$\
"

#space separated list of directories to test
if [ "$1" = "" ]; then
	HEADER_DIRS="src util"
else
	HEADER_DIRS="$1"
fi


#get initial list from git, removing HEADER_EXCLUDED files.
#make a copy to check for the old style header later.
headerlist=$(${FIND_FILES} $HEADER_DIRS | grep -E -v "($HEADER_EXCLUDED)")

LICENSE_ID_STRING="SPDX-License-Identifier"

#update headerlist by removing files that match the license string
check_for_license() {
	if [ -n "$headerlist" ] && [ -z "$2" ]; then
		headerlist="$(grep -iL "${LICENSE_ID_STRING}: $1" $headerlist 2>/dev/null)"
	elif [ -n "$headerlist" ]; then
		p1list="$(grep -il "${LICENSE_ID_STRING}: $1" $headerlist 2>/dev/null)"
		p2list="$(grep -il "${LICENSE_ID_STRING}: $2" $headerlist 2>/dev/null)"

		# Make list of files that were in both previous lists
		pbothlist="$(echo $p1list $p2list | tr ' ' "\n" | \
			sort | uniq -d)"

		# Remove all files that were in both of the previous lists
		# Note that this is unstable if we ever get any filenames
		# with spaces.
		headerlist="$(echo $headerlist $pbothlist | tr ' ' "\n" | \
			sort | uniq -u)"
	fi
}

#search the files for license headers
check_for_license 'Apache-2.0'
check_for_license 'BSD-2-Clause'
check_for_license 'BSD-3-Clause'
check_for_license 'GPL-2.0-only'
check_for_license 'GPL-2.0-or-later'
check_for_license 'GPL-2.0-only WITH Linux-syscall-note'
check_for_license 'GPL-3.0-only'
check_for_license 'GPL-3.0-only WITH GCC-exception-3.1'
check_for_license 'GPL-3.0-or-later'
check_for_license 'HPND'
check_for_license 'HPND-sell-variant'
check_for_license 'ISC'
check_for_license 'MIT'
check_for_license 'X11'

# This is 4 clause ("with advertising") but the University of Berkeley
# declared that 4th clause void, see
# ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
# With this, BSD-4-Clause-UC becomes GPLv2 compatible, and so SPDX doesn't
# differentiate between this license with or without advertising.
check_for_license 'BSD-4-Clause-UC'

# This is the Creative Commons Public Domain Dedication and Certification
# for files that are already in the public domain.  This includes files
# that cannot be licensed such as blank files or files with no "creative"
# content.
check_for_license 'CC-PDDC'

for file in $headerlist; do
	# Verify the file actually exists
	if [ -f "$file" ]; then
		echo "$file has no recognized SPDX identifier."
	fi
done