From 525d803185c44d3436e07689e9726585e4681dc0 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Tue, 14 Jul 2020 16:21:01 -0700 Subject: [PATCH] devtools: add new SPDX license compliance checker Simple script to look for drivers and scripts that are missing requires SPDX header. Signed-off-by: Stephen Hemminger --- MAINTAINERS | 1 + devtools/check-spdx-tag.sh | 70 ++++++++++++++++++++++++ doc/guides/contributing/coding_style.rst | 9 ++- 3 files changed, 78 insertions(+), 2 deletions(-) create mode 100755 devtools/check-spdx-tag.sh diff --git a/MAINTAINERS b/MAINTAINERS index d49628b472..23e7ec9c42 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -91,6 +91,7 @@ F: devtools/check-maintainers.sh F: devtools/check-forbidden-tokens.awk F: devtools/check-git-log.sh F: devtools/check-includes.sh +F: devtools/check-spdx-tag.sh F: devtools/check-symbol-maps.sh F: devtools/checkpatches.sh F: devtools/get-maintainer.sh diff --git a/devtools/check-spdx-tag.sh b/devtools/check-spdx-tag.sh new file mode 100755 index 0000000000..a0ec1ed5b6 --- /dev/null +++ b/devtools/check-spdx-tag.sh @@ -0,0 +1,70 @@ +#! /bin/sh +# SPDX-License-Identifier: BSD-3-Clause +# Copyright 2020 Microsoft Corporation +# +# Produce a list of files with incorrect license tags + +errors=0 +warnings=0 +quiet=false +verbose=false + +print_usage () { + echo "usage: $(basename $0) [-q] [-v]" + exit 1 +} + +check_spdx() { + if $verbose; then + echo "Files without SPDX License" + echo "--------------------------" + fi + git grep -L SPDX-License-Identifier -- \ + ':^.git*' ':^.ci/*' ':^.travis.yml' \ + ':^README' ':^MAINTAINERS' ':^VERSION' ':^ABI_VERSION' \ + ':^*/Kbuild' ':^*/README' \ + ':^license/' ':^config/' ':^buildtools/' \ + ':^*.cocci' ':^*.abignore' \ + ':^*.def' ':^*.map' ':^*.ini' ':^*.data' ':^*.cfg' ':^*.txt' \ + ':^*.svg' ':^*.png'\ + > $tmpfile + + errors=$(wc -l < $tmpfile) + $quiet || cat $tmpfile +} + +check_boilerplate() { + if $verbose ; then + echo + echo "Files with redundant license text" + echo "---------------------------------" + fi + + git grep -l Redistribution -- \ + ':^license/' ':^/devtools/check-spdx-tag.sh' > $tmpfile + + warnings=$(wc -l <$tmpfile) + $quiet || cat $tmpfile +} + +while getopts qvh ARG ; do + case $ARG in + q ) quiet=true ;; + v ) verbose=true ;; + h ) print_usage ; exit 0 ;; + ? ) print_usage ; exit 1 ;; + esac +done +shift $(($OPTIND - 1)) + +tmpfile=$(mktemp -t dpdk.checkspdx.XXXXXX) +trap 'rm -f -- "$tmpfile"' INT TERM HUP EXIT + +check_spdx +$quiet || echo + +check_boilerplate + +$quiet || echo +echo "total: $errors errors, $warnings warnings" +exit $errors diff --git a/doc/guides/contributing/coding_style.rst b/doc/guides/contributing/coding_style.rst index 4efde93f6a..b55075eaa2 100644 --- a/doc/guides/contributing/coding_style.rst +++ b/doc/guides/contributing/coding_style.rst @@ -54,8 +54,13 @@ To document a public API, a doxygen-like format must be used: refer to :ref:`dox License Header ~~~~~~~~~~~~~~ -Each file should begin with a special comment containing the appropriate copyright and license for the file. -Generally this is the BSD License, except for code for Linux Kernel modules. +Each file must begin with a special comment containing the +`Software Package Data Exchange (SPDX) License Identfier `_. + +Generally this is the BSD License, except for code granted special exceptions. +The SPDX licences identifier is sufficient, a file should not contain +an additional text version of the license (boilerplate). + After any copyright header, a blank line should be left before any other contents, e.g. include statements in a C file. C Preprocessor Directives -- 2.20.1