[Linux-kernel-mentees] [PATCH] checkpatch: Fix SPDX license check for scripts

Mrinal Pandey mrinalmni at gmail.com
Tue Jul 21 05:44:19 UTC 2020

In all the scripts, the SPDX license should be on the second line,
the first line being the shebang, but checkpatch issues a warning
"Misplaced SPDX-License-Identifier tag - use line 1 instead" for the
scripts that have SPDX license in the second line.

However, this warning is not issued when checkpatch is run on a file.
The case for files has been handled gracefully by checking first line of
the file to be a shebang and then setting `$checklicenseline` to `2`but
this doesn't work when we don't have shebang in diff content of a patch
and `$checklicenseline` continues to be `1` in such cases. Therefore,
checkpatch expects the line `1` to contain the SPDX license when it
should have been `2` instead.

I noticed this false positive while running checkpatch on the set of
commits from v5.7 to v5.8-rc1 of the kernel on the commits which modified
a script file.

This false positive exists in checkpatch since commit a8da38a9cf0e
("checkpatch: add test for SPDX-License-Identifier on wrong line #")
when the corresponding rule was first commited.

Fix this by setting `$checklicenseline` to `2` whenever the file or diff
content we are checking comes from a script instead of checking first
line to be a shebang, thus, informing checkpatch that the SPDX license
should be expected on the second line.

Signed-off-by: Mrinal Pandey <mrinalmni at gmail.com>
 scripts/checkpatch.pl | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 4c820607540b..bdd2f9a80891 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -3166,10 +3166,11 @@ sub process {
 # check for using SPDX license tag at beginning of files
+		if ($realfile =~ /.*\.\(py\|sh\|pl\|awk\|tc\|yaml\)/) {
+			$checklicenseline = 2;
+		}
 		if ($realline == $checklicenseline) {
-			if ($rawline =~ /^[ \+]\s*\#\!\s*\//) {
-				$checklicenseline = 2;
-			} elsif ($rawline =~ /^\+/) {
+			if ($rawline =~ /^\+/) {
 				my $comment = "";
 				if ($realfile =~ /\.(h|s|S)$/) {
 					$comment = '/*';

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.linuxfoundation.org/pipermail/linux-kernel-mentees/attachments/20200721/83df2bdd/attachment.sig>

More information about the Linux-kernel-mentees mailing list