checkpatch: add --typedefsfile
When using checkpatch on out-of-tree code, it may occur that some project-specific types are used, which will cause spurious warnings. Add the --typedefsfile option as a way to extend the known types and deal with this issue. This was developed for OP-TEE [1]. We run a Travis job on all pull requests [2], and checkpatch is part of that. The typical false warning we get on a regular basis is with some pointers to functions returning TEE_Result [3], which is a typedef from the GlobalPlatform APIs. We consider it is acceptable to use GP types in the OP-TEE core implementation, that's why this patch would be helpful for us. [1] https://github.com/OP-TEE/optee_os [2] https://travis-ci.org/OP-TEE/optee_os/builds [3] https://travis-ci.org/OP-TEE/optee_os/builds/193355335#L1733 Link: http://lkml.kernel.org/r/ba1124d6dfa599bb0dd1d8919dd45dd09ce541a4.1492702192.git.jerome.forissier@linaro.org Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Cc: Joe Perches <joe@perches.com> Cc: Andy Whitcroft <apw@canonical.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>hifive-unleashed-5.1
parent
1b4a2ed4c8
commit
75ad8c575a
|
@ -55,6 +55,7 @@ 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 $conststructsfile = "$D/const_structs.checkpatch";
|
my $conststructsfile = "$D/const_structs.checkpatch";
|
||||||
|
my $typedefsfile = "";
|
||||||
my $color = 1;
|
my $color = 1;
|
||||||
my $allow_c99_comments = 1;
|
my $allow_c99_comments = 1;
|
||||||
|
|
||||||
|
@ -113,6 +114,7 @@ Options:
|
||||||
--codespell Use the codespell dictionary for spelling/typos
|
--codespell Use the codespell dictionary for spelling/typos
|
||||||
(default:/usr/share/codespell/dictionary.txt)
|
(default:/usr/share/codespell/dictionary.txt)
|
||||||
--codespellfile Use this codespell dictionary
|
--codespellfile Use this codespell dictionary
|
||||||
|
--typedefsfile Read additional types from this file
|
||||||
--color Use colors when output is STDOUT (default: on)
|
--color Use colors when output is STDOUT (default: on)
|
||||||
-h, --help, --version display this help and exit
|
-h, --help, --version display this help and exit
|
||||||
|
|
||||||
|
@ -208,6 +210,7 @@ GetOptions(
|
||||||
'test-only=s' => \$tst_only,
|
'test-only=s' => \$tst_only,
|
||||||
'codespell!' => \$codespell,
|
'codespell!' => \$codespell,
|
||||||
'codespellfile=s' => \$codespellfile,
|
'codespellfile=s' => \$codespellfile,
|
||||||
|
'typedefsfile=s' => \$typedefsfile,
|
||||||
'color!' => \$color,
|
'color!' => \$color,
|
||||||
'h|help' => \$help,
|
'h|help' => \$help,
|
||||||
'version' => \$help
|
'version' => \$help
|
||||||
|
@ -629,29 +632,44 @@ if ($codespell) {
|
||||||
|
|
||||||
$misspellings = join("|", sort keys %spelling_fix) if keys %spelling_fix;
|
$misspellings = join("|", sort keys %spelling_fix) if keys %spelling_fix;
|
||||||
|
|
||||||
my $const_structs = "";
|
sub read_words {
|
||||||
if (open(my $conststructs, '<', $conststructsfile)) {
|
my ($wordsRef, $file) = @_;
|
||||||
while (<$conststructs>) {
|
|
||||||
my $line = $_;
|
|
||||||
|
|
||||||
$line =~ s/\s*\n?$//g;
|
if (open(my $words, '<', $file)) {
|
||||||
$line =~ s/^\s*//g;
|
while (<$words>) {
|
||||||
|
my $line = $_;
|
||||||
|
|
||||||
next if ($line =~ m/^\s*#/);
|
$line =~ s/\s*\n?$//g;
|
||||||
next if ($line =~ m/^\s*$/);
|
$line =~ s/^\s*//g;
|
||||||
if ($line =~ /\s/) {
|
|
||||||
print("$conststructsfile: '$line' invalid - ignored\n");
|
next if ($line =~ m/^\s*#/);
|
||||||
next;
|
next if ($line =~ m/^\s*$/);
|
||||||
|
if ($line =~ /\s/) {
|
||||||
|
print("$file: '$line' invalid - ignored\n");
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
$$wordsRef .= '|' if ($$wordsRef ne "");
|
||||||
|
$$wordsRef .= $line;
|
||||||
}
|
}
|
||||||
|
close($file);
|
||||||
$const_structs .= '|' if ($const_structs ne "");
|
return 1;
|
||||||
$const_structs .= $line;
|
|
||||||
}
|
}
|
||||||
close($conststructsfile);
|
|
||||||
} else {
|
return 0;
|
||||||
warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $const_structs = "";
|
||||||
|
read_words(\$const_structs, $conststructsfile)
|
||||||
|
or warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
|
||||||
|
|
||||||
|
my $typeOtherTypedefs = "";
|
||||||
|
if (length($typedefsfile)) {
|
||||||
|
read_words(\$typeOtherTypedefs, $typedefsfile)
|
||||||
|
or warn "No additional types will be considered - file '$typedefsfile': $!\n";
|
||||||
|
}
|
||||||
|
$typeTypedefs .= '|' . $typeOtherTypedefs if ($typeOtherTypedefs ne "");
|
||||||
|
|
||||||
sub build_types {
|
sub build_types {
|
||||||
my $mods = "(?x: \n" . join("|\n ", (@modifierList, @modifierListFile)) . "\n)";
|
my $mods = "(?x: \n" . join("|\n ", (@modifierList, @modifierListFile)) . "\n)";
|
||||||
my $all = "(?x: \n" . join("|\n ", (@typeList, @typeListFile)) . "\n)";
|
my $all = "(?x: \n" . join("|\n ", (@typeList, @typeListFile)) . "\n)";
|
||||||
|
|
Loading…
Reference in New Issue