* [PATCH v6 1/2] checkpatch: Allow passing config directory
@ 2026-04-20 13:30 Petr Vorel
2026-04-20 13:30 ` [PATCH v6 2/2] checkpatch: Add option to not force /* */ for SPDX Petr Vorel
2026-04-21 10:30 ` [PATCH v6 1/2] checkpatch: Allow passing config directory Petr Vorel
0 siblings, 2 replies; 3+ messages in thread
From: Petr Vorel @ 2026-04-20 13:30 UTC (permalink / raw)
To: linux-kernel
Cc: Petr Vorel, Joe Perches, Simon Glass, Dwaipayan Ray,
Lukas Bulwahn
checkpatch.pl searches for .checkpatch.conf in $CWD, $HOME and
$CWD/.scripts. Allow passing a single directory via
CHECKPATCH_CONFIG_DIR environment variable. This allows to directly use
project configuration file for projects which vendored checkpatch.pl
(e.g. LTP or u-boot).
Although it'd be more convenient for user to have --conf-dir option
(instead of using environment variable), code would get ugly because
options from the configuration file needs to be read before processing
command line options with Getopt::Long.
While at it, document directories and environment variable in -h help
and HTML doc.
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
Changes in v6:
* Improve wording "fallback" => falling back" (Simon), "locations" =>
"search paths" (to be consistent).
* Document config file also in Documentation/dev-tools/checkpatch.rst
* Remove $! in error message (Simon, sashiko)
Link to v5:
https://lore.kernel.org/lkml/20260417170346.448758-1-pvorel@suse.cz/
Link to v4:
https://lore.kernel.org/lkml/20260415143636.272605-1-pvorel@suse.cz/
Link to v3:
https://lore.kernel.org/lkml/20260408120603.54351-1-pvorel@suse.cz/
Link to v2:
https://lore.kernel.org/lkml/20260224181623.89904-1-pvorel@suse.cz/
Link to v1:
https://lore.kernel.org/lkml/20260202144221.76765-2-pvorel@suse.cz/
Documentation/dev-tools/checkpatch.rst | 7 +++++++
scripts/checkpatch.pl | 19 ++++++++++++++++---
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/Documentation/dev-tools/checkpatch.rst b/Documentation/dev-tools/checkpatch.rst
index dccede68698ca..010dfcd615afc 100644
--- a/Documentation/dev-tools/checkpatch.rst
+++ b/Documentation/dev-tools/checkpatch.rst
@@ -210,6 +210,13 @@ Available options:
Display the help text.
+Configuration file
+==================
+
+Default configuration options can be stored in ``.checkpatch.conf``, search
+path: ``.:$HOME:.scripts`` or in a directory specified by ``$CHECKPATCH_CONFIG_DIR``
+environment variable (falling back to the default search path).
+
Message Levels
==============
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 0492d6afc9a1f..d86f5ccb06fe4 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -57,6 +57,8 @@ my %ignore_type = ();
my @ignore = ();
my $help = 0;
my $configuration_file = ".checkpatch.conf";
+my $def_configuration_dirs = ".:$ENV{HOME}:.scripts";
+my $env_config_dir = 'CHECKPATCH_CONFIG_DIR';
my $max_line_length = 100;
my $ignore_perl_version = 0;
my $minimum_perl_version = 5.10.0;
@@ -146,6 +148,11 @@ Options:
-h, --help, --version display this help and exit
When FILE is - read standard input.
+
+CONFIGURATION FILE
+Default configuration options can be stored in $configuration_file,
+search path: '$def_configuration_dirs' or in a directory specified by
+\$$env_config_dir environment variable (fallback to the default search path).
EOM
exit($exitcode);
@@ -237,7 +244,7 @@ sub list_types {
exit($exitcode);
}
-my $conf = which_conf($configuration_file);
+my $conf = which_conf($configuration_file, $env_config_dir, $def_configuration_dirs);
if (-f $conf) {
my @conf_args;
open(my $conffile, '<', "$conf")
@@ -1531,9 +1538,15 @@ sub which {
}
sub which_conf {
- my ($conf) = @_;
+ my ($conf, $env_key, $paths) = @_;
+ my $env_dir = $ENV{$env_key};
+
+ if (defined($env_dir)) {
+ return "$env_dir/$conf" if (-e "$env_dir/$conf");
+ warn "$P: Can't find a readable $conf in '$env_dir', falling back to default search paths\n";
+ }
- foreach my $path (split(/:/, ".:$ENV{HOME}:.scripts")) {
+ foreach my $path (split(/:/, $paths)) {
if (-e "$path/$conf") {
return "$path/$conf";
}
--
2.53.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH v6 2/2] checkpatch: Add option to not force /* */ for SPDX
2026-04-20 13:30 [PATCH v6 1/2] checkpatch: Allow passing config directory Petr Vorel
@ 2026-04-20 13:30 ` Petr Vorel
2026-04-21 10:30 ` [PATCH v6 1/2] checkpatch: Allow passing config directory Petr Vorel
1 sibling, 0 replies; 3+ messages in thread
From: Petr Vorel @ 2026-04-20 13:30 UTC (permalink / raw)
To: linux-kernel
Cc: Petr Vorel, Joe Perches, Simon Glass, Dwaipayan Ray,
Lukas Bulwahn
Add option --spdx-cxx-comments to not force C comments (/* */) for SPDX,
but allow also C++ comments (//).
As documented in aa19a176df95d6, this is required for some old
toolchains still have older assembler tools which cannot handle C++
style comments. This avoids forcing this for projects which vendored
checkpatch.pl (e.g. LTP or u-boot).
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
Changes in v6:
* Fix escaping '..' by \Q \E (Simon, sashiko)
* Fix formatting of /* */ in Documentation/dev-tools/checkpatch.rst
(sashiko)
* Fix wording in the commit message (Simon)
Link to v5:
https://lore.kernel.org/lkml/20260417170346.448758-2-pvorel@suse.cz/
Link to v4:
https://lore.kernel.org/lkml/20260415143636.272605-2-pvorel@suse.cz/
Link to v3:
https://lore.kernel.org/lkml/20260408120603.54351-2-pvorel@suse.cz/
Thanks Simon for patient review, let's see if maintainers like the
changes.
Documentation/dev-tools/checkpatch.rst | 7 +++++++
scripts/checkpatch.pl | 23 ++++++++++++++++++-----
2 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/Documentation/dev-tools/checkpatch.rst b/Documentation/dev-tools/checkpatch.rst
index 010dfcd615afc..6139a08c34cd8 100644
--- a/Documentation/dev-tools/checkpatch.rst
+++ b/Documentation/dev-tools/checkpatch.rst
@@ -184,6 +184,13 @@ Available options:
Override checking of perl version. Runtime errors may be encountered after
enabling this flag if the perl version does not meet the minimum specified.
+ - --spdx-cxx-comments
+
+ Don't force C comments ``/* */`` for SPDX license (required by old
+ toolchains), allow also C++ comments ``//``.
+
+ NOTE: it should *not* be used for Linux mainline.
+
- --codespell
Use the codespell dictionary for checking spelling errors.
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index d86f5ccb06fe4..18da0cbf873cb 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -61,6 +61,7 @@ my $def_configuration_dirs = ".:$ENV{HOME}:.scripts";
my $env_config_dir = 'CHECKPATCH_CONFIG_DIR';
my $max_line_length = 100;
my $ignore_perl_version = 0;
+my $spdx_cxx_comments = 0;
my $minimum_perl_version = 5.10.0;
my $min_conf_desc_length = 4;
my $spelling_file = "$D/spelling.txt";
@@ -137,6 +138,10 @@ Options:
file. It's your fault if there's no backup or git
--ignore-perl-version override checking of perl version. expect
runtime errors.
+ --spdx-cxx-comments don't force C comments (/* */) for SPDX license
+ (required by old toolchains), allow also C++
+ comments (//).
+ NOTE: it should *not* be used for Linux mainline.
--codespell Use the codespell dictionary for spelling/typos
(default:$codespellfile)
--codespellfile Use this codespell dictionary
@@ -346,6 +351,7 @@ GetOptions(
'fix!' => \$fix,
'fix-inplace!' => \$fix_inplace,
'ignore-perl-version!' => \$ignore_perl_version,
+ 'spdx-cxx-comments!' => \$spdx_cxx_comments,
'debug=s' => \%debug,
'test-only=s' => \$tst_only,
'codespell!' => \$codespell,
@@ -3814,26 +3820,33 @@ sub process {
$checklicenseline = 2;
} elsif ($rawline =~ /^\+/) {
my $comment = "";
- if ($realfile =~ /\.(h|s|S)$/) {
- $comment = '/*';
- } elsif ($realfile =~ /\.(c|rs|dts|dtsi)$/) {
+ if ($realfile =~ /\.(c|rs|dts|dtsi)$/) {
$comment = '//';
} elsif (($checklicenseline == 2) || $realfile =~ /\.(sh|pl|py|awk|tc|yaml)$/) {
$comment = '#';
} elsif ($realfile =~ /\.rst$/) {
$comment = '..';
}
+ my $pattern = qr{\Q$comment\E};
+ if ($realfile =~ /\.(h|s|S)$/) {
+ $comment = '/*';
+ $pattern = qr{/\*};
+ if ($spdx_cxx_comments) {
+ $comment = '// or /*';
+ $pattern = qr{//|/\*};
+ }
+ }
# check SPDX comment style for .[chsS] files
if ($realfile =~ /\.[chsS]$/ &&
$rawline =~ /SPDX-License-Identifier:/ &&
- $rawline !~ m@^\+\s*\Q$comment\E\s*@) {
+ $rawline !~ m@^\+\s*$pattern\s*@) {
WARN("SPDX_LICENSE_TAG",
"Improper SPDX comment style for '$realfile', please use '$comment' instead\n" . $herecurr);
}
if ($comment !~ /^$/ &&
- $rawline !~ m@^\+\Q$comment\E SPDX-License-Identifier: @) {
+ $rawline !~ m@^\+$pattern SPDX-License-Identifier: @) {
WARN("SPDX_LICENSE_TAG",
"Missing or malformed SPDX-License-Identifier tag in line $checklicenseline\n" . $herecurr);
} elsif ($rawline =~ /(SPDX-License-Identifier: .*)/) {
--
2.53.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH v6 1/2] checkpatch: Allow passing config directory
2026-04-20 13:30 [PATCH v6 1/2] checkpatch: Allow passing config directory Petr Vorel
2026-04-20 13:30 ` [PATCH v6 2/2] checkpatch: Add option to not force /* */ for SPDX Petr Vorel
@ 2026-04-21 10:30 ` Petr Vorel
1 sibling, 0 replies; 3+ messages in thread
From: Petr Vorel @ 2026-04-21 10:30 UTC (permalink / raw)
To: linux-kernel; +Cc: Joe Perches, Simon Glass, Dwaipayan Ray, Lukas Bulwahn
Hi Simon, all,
> checkpatch.pl searches for .checkpatch.conf in $CWD, $HOME and
> $CWD/.scripts. Allow passing a single directory via
> CHECKPATCH_CONFIG_DIR environment variable. This allows to directly use
> project configuration file for projects which vendored checkpatch.pl
> (e.g. LTP or u-boot).
> Although it'd be more convenient for user to have --conf-dir option
> (instead of using environment variable), code would get ugly because
> options from the configuration file needs to be read before processing
> command line options with Getopt::Long.
> While at it, document directories and environment variable in -h help
> and HTML doc.
I'm sorry for the noise, I need to send v7, with diff below.
1) Fix empty variable, (I was thinking about but in the end forget).
2) Print $HOME in help instead the actual value of $HOME environment variable.
Kind regards,
Petr
+++ scripts/checkpatch.pl
@@ -57,7 +57,8 @@ my %ignore_type = ();
my @ignore = ();
my $help = 0;
my $configuration_file = ".checkpatch.conf";
-my $def_configuration_dirs = ".:$ENV{HOME}:.scripts";
+my $def_configuration_dirs_help = '.:$HOME:.scripts';
+(my $def_configuration_dirs = $def_configuration_dirs_help) =~ s/\$(\w+)/$ENV{$1} /g;
my $env_config_dir = 'CHECKPATCH_CONFIG_DIR';
my $max_line_length = 100;
my $ignore_perl_version = 0;
@@ -151,7 +152,7 @@ When FILE is - read standard input.
CONFIGURATION FILE
Default configuration options can be stored in $configuration_file,
-search path: '$def_configuration_dirs' or in a directory specified by
+search path: '$def_configuration_dirs_help' or in a directory specified by
\$$env_config_dir environment variable (fallback to the default search path).
EOM
@@ -1541,7 +1542,7 @@ sub which_conf {
my ($conf, $env_key, $paths) = @_;
my $env_dir = $ENV{$env_key};
- if (defined($env_dir)) {
+ if (defined($env_dir) && $env_dir ne "") {
return "$env_dir/$conf" if (-e "$env_dir/$conf");
warn "$P: Can't find a readable $conf in '$env_dir', falling back to default search paths\n";
}
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-04-21 10:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-20 13:30 [PATCH v6 1/2] checkpatch: Allow passing config directory Petr Vorel
2026-04-20 13:30 ` [PATCH v6 2/2] checkpatch: Add option to not force /* */ for SPDX Petr Vorel
2026-04-21 10:30 ` [PATCH v6 1/2] checkpatch: Allow passing config directory Petr Vorel
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.