Commit 75ad8c57 authored by Jerome Forissier's avatar Jerome Forissier Committed by Linus Torvalds

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.orgSigned-off-by: default avatarJerome Forissier <jerome.forissier@linaro.org>
Cc: Joe Perches <joe@perches.com>
Cc: Andy Whitcroft <apw@canonical.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 1b4a2ed4
...@@ -55,6 +55,7 @@ my $spelling_file = "$D/spelling.txt"; ...@@ -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: ...@@ -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( ...@@ -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,28 +632,43 @@ if ($codespell) { ...@@ -629,28 +632,43 @@ 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;
}
$const_structs .= '|' if ($const_structs ne ""); next if ($line =~ m/^\s*#/);
$const_structs .= $line; next if ($line =~ m/^\s*$/);
if ($line =~ /\s/) {
print("$file: '$line' invalid - ignored\n");
next;
}
$$wordsRef .= '|' if ($$wordsRef ne "");
$$wordsRef .= $line;
}
close($file);
return 1;
} }
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)";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment