diff mbox series

checkpatch.pl: Add SPDX license tag check

Message ID 20180201211429.32696-1-robh@kernel.org
State Superseded
Headers show
Series checkpatch.pl: Add SPDX license tag check | expand

Commit Message

Rob Herring Feb. 1, 2018, 9:14 p.m. UTC
Add SPDX license tag check based on the rules defined in
Documentation/process/license-rules.rst. To summarize, SPDX license tags
should be on the 1st line (or 2nd line in scripts) using the appropriate
comment style for the file type.

Cc: Andy Whitcroft <apw@canonical.com>
Cc: Joe Perches <joe@perches.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Philippe Ombredanne <pombredanne@nexb.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Rob Herring <robh@kernel.org>

---
I didn't get around to resending once license-rules.rst landed in -next. 
Hopefully, this can be picked up for 4.16 so folks can start using it. 
SPDX tags have already become a frequent review comment.

Rob

 scripts/checkpatch.pl | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

-- 
2.14.1

Comments

Joe Perches Feb. 1, 2018, 9:49 p.m. UTC | #1
On Thu, 2018-02-01 at 15:14 -0600, Rob Herring wrote:
> Add SPDX license tag check based on the rules defined in

> Documentation/process/license-rules.rst. To summarize, SPDX license tags

> should be on the 1st line (or 2nd line in scripts) using the appropriate

> comment style for the file type.

> 

> Cc: Andy Whitcroft <apw@canonical.com>

> Cc: Joe Perches <joe@perches.com>

> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

> Cc: Thomas Gleixner <tglx@linutronix.de>

> Cc: Philippe Ombredanne <pombredanne@nexb.com>

> Cc: Andrew Morton <akpm@linux-foundation.org>

> Signed-off-by: Rob Herring <robh@kernel.org>

> ---

> I didn't get around to resending once license-rules.rst landed in -next. 

> Hopefully, this can be picked up for 4.16 so folks can start using it. 

> SPDX tags have already become a frequent review comment.


Seems sensible enough now.
Here are some other suggestions.

> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl

[]
> @@ -2866,6 +2869,30 @@ sub process {

>  			}

>  		}

>  

> +# check for using SPDX license tag at beginning of files

> +		if ($realline == $checklicenseline) {

> +			if ($realfile =~ /\.(?:sh|pl|py)/ && $rawline =~ /\[ \+]\s*\!\#/) {


There are many files with a #! shebang that do
not use these filename types.

$ git grep -P --name-only '^\s*\#\!\s*/(?:bin|usr)' | \
  grep -vP
"(?:txt|rst|py|sh|pl)$" | wc -l
158

i.e.: .tc and .awk files and ~100 files without extensions

So I would add awk and tc to the $realfile test and
perhaps extend this check to test if the file is not
binary and executable.

> +				$checklicenseline = 2;

> +			} elsif ($rawline =~ /^\+/) {

> +				my $comment = "";

> +				if ($realfile =~ /\.(h|s|S)$/) {

> +					$comment = '/*';

> +				} elsif ($realfile =~ /\.(c|dts|dtsi)$/) {

> +					$comment = '//';

> +				} elsif ($realfile =~ /\.(sh|pl|py)$/) {

> +					$comment = '#';

> +				} elsif ($realfile =~ /\.rst$/) {

> +					$comment = '..';

> +				}

> +

> +				if ($comment !~ /^$/ &&

> +				    $rawline !~ /^\+\Q$comment\E SPDX-License-Identifier: /) {

> +					WARN("SPDX_LICENSE_TAG",

> +					     "Missing or malformed SPDX-License-Identifier tag in 1st (or 2nd for scripts) line\n" . $herecurr);


Perhaps 'Missing ... in line $checklicense\n"
Greg Kroah-Hartman Feb. 2, 2018, 7:56 a.m. UTC | #2
On Thu, Feb 01, 2018 at 03:14:29PM -0600, Rob Herring wrote:
> Add SPDX license tag check based on the rules defined in

> Documentation/process/license-rules.rst. To summarize, SPDX license tags

> should be on the 1st line (or 2nd line in scripts) using the appropriate

> comment style for the file type.

> 

> Cc: Andy Whitcroft <apw@canonical.com>

> Cc: Joe Perches <joe@perches.com>

> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

> Cc: Thomas Gleixner <tglx@linutronix.de>

> Cc: Philippe Ombredanne <pombredanne@nexb.com>

> Cc: Andrew Morton <akpm@linux-foundation.org>

> Signed-off-by: Rob Herring <robh@kernel.org>


Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Philippe Ombredanne Feb. 8, 2018, 2:23 p.m. UTC | #3
On Thu, Feb 1, 2018 at 10:14 PM, Rob Herring <robh@kernel.org> wrote:
> Add SPDX license tag check based on the rules defined in

> Documentation/process/license-rules.rst. To summarize, SPDX license tags

> should be on the 1st line (or 2nd line in scripts) using the appropriate

> comment style for the file type.

>

> Cc: Andy Whitcroft <apw@canonical.com>

> Cc: Joe Perches <joe@perches.com>

> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

> Cc: Thomas Gleixner <tglx@linutronix.de>

> Cc: Philippe Ombredanne <pombredanne@nexb.com>

> Cc: Andrew Morton <akpm@linux-foundation.org>

> Signed-off-by: Rob Herring <robh@kernel.org>


Acked-by:  Philippe Ombredanne <pombredanne@nexB.com>


(Sorry for the late reply but I was busy with FOSDEM)
diff mbox series

Patch

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index ba03f17ff662..cf1b5a90b20a 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2225,6 +2225,8 @@  sub process {
 
 	my $camelcase_file_seeded = 0;
 
+	my $checklicenseline = 1;
+
 	sanitise_line_reset();
 	my $line;
 	foreach my $rawline (@rawlines) {
@@ -2416,6 +2418,7 @@  sub process {
 			} else {
 				$check = $check_orig;
 			}
+			$checklicenseline = 1;
 			next;
 		}
 
@@ -2866,6 +2869,30 @@  sub process {
 			}
 		}
 
+# check for using SPDX license tag at beginning of files
+		if ($realline == $checklicenseline) {
+			if ($realfile =~ /\.(?:sh|pl|py)/ && $rawline =~ /\[ \+]\s*\!\#/) {
+				$checklicenseline = 2;
+			} elsif ($rawline =~ /^\+/) {
+				my $comment = "";
+				if ($realfile =~ /\.(h|s|S)$/) {
+					$comment = '/*';
+				} elsif ($realfile =~ /\.(c|dts|dtsi)$/) {
+					$comment = '//';
+				} elsif ($realfile =~ /\.(sh|pl|py)$/) {
+					$comment = '#';
+				} elsif ($realfile =~ /\.rst$/) {
+					$comment = '..';
+				}
+
+				if ($comment !~ /^$/ &&
+				    $rawline !~ /^\+\Q$comment\E SPDX-License-Identifier: /) {
+					WARN("SPDX_LICENSE_TAG",
+					     "Missing or malformed SPDX-License-Identifier tag in 1st (or 2nd for scripts) line\n" . $herecurr);
+				}
+			}
+		}
+
 # check we are in a valid source file if not then ignore this hunk
 		next if ($realfile !~ /\.(h|c|s|S|sh|dtsi|dts)$/);