scripts/checkpatch.pl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
checkpatch.pl searches for .checkpatch.conf in $HOME and .scripts
(in current working directory). Allow to pass 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).
While at it, document all directories in help.
Suggested-by: Joe Perches <joe@perches.com>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
NOTE: if you don't like the way how directories are printed in help
(user's home directory path instead of $HOME) I can change it.
$ ./scripts/checkpatch.pl -h
...
When FILE is - read standard input.
CONFIGURATION FILE
Script searches for a configuration file .checkpatch.conf in path:
$CHECKPATCH_CONFIG_DIR:.:/home/foo:.scripts
Link to v1:
https://lore.kernel.org/lkml/20260202144221.76765-1-pvorel@suse.cz/
https://lore.kernel.org/lkml/20260202144221.76765-2-pvorel@suse.cz/
Changes v1->v2:
* Use environment variable instead of --conf-dir option (Joe Perches)
NOTE: I'd slightly prefer using --conf-dir (more convenient for user).
* squash documentation into this commit
Kind regards,
Petr
scripts/checkpatch.pl | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index bec7930cdd66..e47fec115ee7 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,10 @@ Options:
-h, --help, --version display this help and exit
When FILE is - read standard input.
+
+CONFIGURATION FILE
+Script searches for a configuration file $configuration_file in path:
+\$$env_config_dir:$def_configuration_dirs
EOM
exit($exitcode);
@@ -1531,8 +1537,10 @@ sub which {
sub which_conf {
my ($conf) = @_;
+ my $paths = $ENV{$env_config_dir} . ':' if exists($ENV{$env_config_dir});
+ $paths .= $def_configuration_dirs;
- foreach my $path (split(/:/, ".:$ENV{HOME}:.scripts")) {
+ foreach my $path (split(/:/, $paths)) {
if (-e "$path/$conf") {
return "$path/$conf";
}
--
2.51.0
Hi Petr,
On Tue, 24 Feb 2026 at 11:20, Petr Vorel <pvorel@suse.cz> wrote:
>
> checkpatch.pl searches for .checkpatch.conf in $HOME and .scripts
> (in current working directory). Allow to pass directory via
How about: Allow passing a directory
> 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).
>
> While at it, document all directories in help.
>
> Suggested-by: Joe Perches <joe@perches.com>
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
> NOTE: if you don't like the way how directories are printed in help
> (user's home directory path instead of $HOME) I can change it.
>
> $ ./scripts/checkpatch.pl -h
> ...
> When FILE is - read standard input.
>
> CONFIGURATION FILE
>
> Script searches for a configuration file .checkpatch.conf in path:
> $CHECKPATCH_CONFIG_DIR:.:/home/foo:.scripts
It looks like this can be a colon-separated list of dirs - perhaps
document that, if intended?
>
> Link to v1:
> https://lore.kernel.org/lkml/20260202144221.76765-1-pvorel@suse.cz/
> https://lore.kernel.org/lkml/20260202144221.76765-2-pvorel@suse.cz/
>
> Changes v1->v2:
> * Use environment variable instead of --conf-dir option (Joe Perches)
> NOTE: I'd slightly prefer using --conf-dir (more convenient for user).
Agreed.
> * squash documentation into this commit
>
> Kind regards,
> Petr
>
> scripts/checkpatch.pl | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index bec7930cdd66..e47fec115ee7 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,10 @@ Options:
> -h, --help, --version display this help and exit
>
> When FILE is - read standard input.
> +
> +CONFIGURATION FILE
> +Script searches for a configuration file $configuration_file in path:
> +\$$env_config_dir:$def_configuration_dirs
> EOM
>
> exit($exitcode);
> @@ -1531,8 +1537,10 @@ sub which {
>
> sub which_conf {
> my ($conf) = @_;
> + my $paths = $ENV{$env_config_dir} . ':' if exists($ENV{$env_config_dir});
How about splitting it so that the variable cannot be undef ?
my $paths = $def_configuration_dirs;
$paths = "$ENV{$env_config_dir}:$paths" if exists($ENV{$env_config_dir});
> + $paths .= $def_configuration_dirs;
>
> - foreach my $path (split(/:/, ".:$ENV{HOME}:.scripts")) {
> + foreach my $path (split(/:/, $paths)) {
> if (-e "$path/$conf") {
> return "$path/$conf";
> }
> --
> 2.51.0
>
>
Regards,
Simon
Hi Simon,
first, thanks for your review!
> Hi Petr,
> On Tue, 24 Feb 2026 at 11:20, Petr Vorel <pvorel@suse.cz> wrote:
> > checkpatch.pl searches for .checkpatch.conf in $HOME and .scripts
> > (in current working directory). Allow to pass directory via
> How about: Allow passing a directory
+1
> > 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).
> > While at it, document all directories in help.
> > Suggested-by: Joe Perches <joe@perches.com>
> > Signed-off-by: Petr Vorel <pvorel@suse.cz>
> > ---
> > NOTE: if you don't like the way how directories are printed in help
> > (user's home directory path instead of $HOME) I can change it.
> > $ ./scripts/checkpatch.pl -h
> > ...
> > When FILE is - read standard input.
> > CONFIGURATION FILE
> > Script searches for a configuration file .checkpatch.conf in path:
> > $CHECKPATCH_CONFIG_DIR:.:/home/foo:.scripts
> It looks like this can be a colon-separated list of dirs - perhaps
> document that, if intended?
It was not intended. I'd slightly prefer variable should point into single
directory (that's why I did it in v1), I'll send v3.
But sure, it can be list of directories if you really prefer it.
> > Link to v1:
> > https://lore.kernel.org/lkml/20260202144221.76765-1-pvorel@suse.cz/
> > https://lore.kernel.org/lkml/20260202144221.76765-2-pvorel@suse.cz/
> > Changes v1->v2:
> > * Use environment variable instead of --conf-dir option (Joe Perches)
> > NOTE: I'd slightly prefer using --conf-dir (more convenient for user).
> Agreed.
I don't want to fight against Joe's NACK of v1 (unless he changes his mind).
> > * squash documentation into this commit
> > Kind regards,
> > Petr
> > scripts/checkpatch.pl | 10 +++++++++-
> > 1 file changed, 9 insertions(+), 1 deletion(-)
> > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> > index bec7930cdd66..e47fec115ee7 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,10 @@ Options:
> > -h, --help, --version display this help and exit
> > When FILE is - read standard input.
> > +
> > +CONFIGURATION FILE
> > +Script searches for a configuration file $configuration_file in path:
> > +\$$env_config_dir:$def_configuration_dirs
> > EOM
> > exit($exitcode);
> > @@ -1531,8 +1537,10 @@ sub which {
> > sub which_conf {
> > my ($conf) = @_;
> > + my $paths = $ENV{$env_config_dir} . ':' if exists($ENV{$env_config_dir});
> How about splitting it so that the variable cannot be undef ?
> my $paths = $def_configuration_dirs;
> $paths = "$ENV{$env_config_dir}:$paths" if exists($ENV{$env_config_dir});
+1, sure, thanks!
Kind regards,
Petr
> > + $paths .= $def_configuration_dirs;
> > - foreach my $path (split(/:/, ".:$ENV{HOME}:.scripts")) {
> > + foreach my $path (split(/:/, $paths)) {
> > if (-e "$path/$conf") {
> > return "$path/$conf";
> > }
> > --
> > 2.51.0
> Regards,
> Simon
On Thu, 2026-03-26 at 21:50 +0100, Petr Vorel wrote:
> > my $paths = $def_configuration_dirs;
> > $paths = "$ENV{$env_config_dir}:$paths" if exists($ENV{$env_config_dir});
>
> +1, sure, thanks!
Why have two uses of $ENV{$env_config_dir}?
Seems typo error prone and somewhat difficult to read.
> On Thu, 2026-03-26 at 21:50 +0100, Petr Vorel wrote:
> > > my $paths = $def_configuration_dirs;
> > > $paths = "$ENV{$env_config_dir}:$paths" if exists($ENV{$env_config_dir});
> > +1, sure, thanks!
> Why have two uses of $ENV{$env_config_dir}?
Your suggestion in v1 :).
> Seems typo error prone and somewhat difficult to read.
In v3 I'll just prepend it without checking, because we do the check later on
if (-e "$path/$conf").
And add a note that one can add more dirs (like in PATH or LD_LIBRARY_PATH).
But again, it looks to me more better to point just a single file.
Check would be done only on the directory to which variable points, that's what
would user probably want (not silently fallbacking into the default
directories). But that would require slightly more code changes.
Kind regards,
Petr
Hi all,
> checkpatch.pl searches for .checkpatch.conf in $HOME and .scripts
> (in current working directory). Allow to pass 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).
Gentle ping for a feedback.
Kind regards,
Petr
> While at it, document all directories in help.
> Suggested-by: Joe Perches <joe@perches.com>
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
> NOTE: if you don't like the way how directories are printed in help
> (user's home directory path instead of $HOME) I can change it.
> $ ./scripts/checkpatch.pl -h
> ...
> When FILE is - read standard input.
> CONFIGURATION FILE
> Script searches for a configuration file .checkpatch.conf in path:
> $CHECKPATCH_CONFIG_DIR:.:/home/foo:.scripts
> Link to v1:
> https://lore.kernel.org/lkml/20260202144221.76765-1-pvorel@suse.cz/
> https://lore.kernel.org/lkml/20260202144221.76765-2-pvorel@suse.cz/
> Changes v1->v2:
> * Use environment variable instead of --conf-dir option (Joe Perches)
> NOTE: I'd slightly prefer using --conf-dir (more convenient for user).
> * squash documentation into this commit
> Kind regards,
> Petr
> scripts/checkpatch.pl | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index bec7930cdd66..e47fec115ee7 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,10 @@ Options:
> -h, --help, --version display this help and exit
> When FILE is - read standard input.
> +
> +CONFIGURATION FILE
> +Script searches for a configuration file $configuration_file in path:
> +\$$env_config_dir:$def_configuration_dirs
> EOM
> exit($exitcode);
> @@ -1531,8 +1537,10 @@ sub which {
> sub which_conf {
> my ($conf) = @_;
> + my $paths = $ENV{$env_config_dir} . ':' if exists($ENV{$env_config_dir});
> + $paths .= $def_configuration_dirs;
> - foreach my $path (split(/:/, ".:$ENV{HOME}:.scripts")) {
> + foreach my $path (split(/:/, $paths)) {
> if (-e "$path/$conf") {
> return "$path/$conf";
> }
© 2016 - 2026 Red Hat, Inc.