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
|