devtools: add new SPDX license compliance checker
[dpdk.git] / devtools / check-spdx-tag.sh
diff --git a/devtools/check-spdx-tag.sh b/devtools/check-spdx-tag.sh
new file mode 100755 (executable)
index 0000000..a0ec1ed
--- /dev/null
@@ -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