checkpatch: get default codespell dictionary path from package location

The standard location of dictionary.txt is under codespell's package, on
my machine atm (codespell 2.1, Artix Linux):

  /usr/lib/python3.9/site-packages/codespell_lib/data/dictionary.txt

Since we enable the codespell by default for SOF I have constant:

  No codespell typos will be found - file '/usr/share/codespell/dictionary.txt': No such file or directory

The patch proposes to try to fix up the path following the
recommendation found here:

  https://github.com/codespell-project/codespell/issues/1540

Mainline commit:
0ee3e7b8893e ("checkpatch: get default codespell dictionary path from package location")

Link: https://lkml.kernel.org/r/29e25d1364c8ad7f7657cc0660f60c568074d438.camel@perches.com
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Acked-by: Joe Perches <joe@perches.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Peter Ujfalusi 2021-11-08 18:33:34 -08:00 committed by Liam Girdwood
parent 5048eb74b1
commit 81c8279590
1 changed files with 28 additions and 4 deletions

View File

@ -59,6 +59,7 @@ my $min_conf_desc_length = 4;
my $spelling_file = "$D/spelling.txt"; my $spelling_file = "$D/spelling.txt";
my $codespell = 0; my $codespell = 0;
my $codespellfile = "/usr/share/codespell/dictionary.txt"; my $codespellfile = "/usr/share/codespell/dictionary.txt";
my $user_codespellfile = "";
my $conststructsfile = "$D/const_structs.checkpatch"; my $conststructsfile = "$D/const_structs.checkpatch";
my $typedefsfile = ""; my $typedefsfile = "";
my $color = "auto"; my $color = "auto";
@ -121,7 +122,7 @@ Options:
--ignore-perl-version override checking of perl version. expect --ignore-perl-version override checking of perl version. expect
runtime errors. runtime errors.
--codespell Use the codespell dictionary for spelling/typos --codespell Use the codespell dictionary for spelling/typos
(default:/usr/share/codespell/dictionary.txt) (default:$codespellfile)
--codespellfile Use this codespell dictionary --codespellfile Use this codespell dictionary
--typedefsfile Read additional types from this file --typedefsfile Read additional types from this file
--color[=WHEN] Use colors 'always', 'never', or only when output --color[=WHEN] Use colors 'always', 'never', or only when output
@ -228,16 +229,39 @@ GetOptions(
'debug=s' => \%debug, 'debug=s' => \%debug,
'test-only=s' => \$tst_only, 'test-only=s' => \$tst_only,
'codespell!' => \$codespell, 'codespell!' => \$codespell,
'codespellfile=s' => \$codespellfile, 'codespellfile=s' => \$user_codespellfile,
'typedefsfile=s' => \$typedefsfile, 'typedefsfile=s' => \$typedefsfile,
'color=s' => \$color, 'color=s' => \$color,
'no-color' => \$color, #keep old behaviors of -nocolor 'no-color' => \$color, #keep old behaviors of -nocolor
'nocolor' => \$color, #keep old behaviors of -nocolor 'nocolor' => \$color, #keep old behaviors of -nocolor
'h|help' => \$help, 'h|help' => \$help,
'version' => \$help 'version' => \$help
) or help(1); ) or $help = 2;
help(0) if ($help); if ($user_codespellfile) {
# Use the user provided codespell file unconditionally
$codespellfile = $user_codespellfile;
} elsif (!(-f $codespellfile)) {
# If /usr/share/codespell/dictionary.txt is not present, try to find it
# under codespell's install directory: <codespell_root>/data/dictionary.txt
if (($codespell || $help) && which("codespell") ne "" && which("python") ne "") {
my $python_codespell_dict = << "EOF";
import os.path as op
import codespell_lib
codespell_dir = op.dirname(codespell_lib.__file__)
codespell_file = op.join(codespell_dir, 'data', 'dictionary.txt')
print(codespell_file, end='')
EOF
my $codespell_dict = `python -c "$python_codespell_dict" 2> /dev/null`;
$codespellfile = $codespell_dict if (-f $codespell_dict);
}
}
# $help is 1 if either -h, --help or --version is passed as option - exitcode: 0
# $help is 2 if invalid option is passed - exitcode: 1
help($help - 1) if ($help);
list_types(0) if ($list_types); list_types(0) if ($list_types);