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 --- 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 = '/*'; -- 2.25.1