Options:
-q, --quiet quiet
- --no-tree run without a kernel tree
+ --no-tree run without a openocd tree
--no-signoff do not check for 'Signed-off-by' line
--patch treat FILE as patchfile (default)
--emacs emacs compile window format
--subjective, --strict enable more subjective tests
--ignore TYPE(,TYPE2...) ignore various comma separated message types
--show-types show the message "types" in the output
- --root=PATH PATH to the kernel tree root
+ --root=PATH PATH to the openocd tree root
--no-summary suppress the per-file summary
--mailback only produce a report in case of warnings/errors
--summary-file include the filename in summary
} else {
if (top_of_kernel_tree('.')) {
$root = '.';
- } elsif ($0 =~ m@(.*)/scripts/[^/]*$@ &&
+ } elsif ($0 =~ m@(.*)/tools/scripts/[^/]*$@ &&
top_of_kernel_tree($1)) {
$root = $1;
}
}
if (!defined $root) {
- print "Must be run from the top-level dir. of a kernel tree\n";
+ print "Must be run from the top-level dir. of a openocd tree\n";
exit(2);
}
}
[a-z0-9]+_(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)|
WARN(?:_RATELIMIT|_ONCE|)|
panic|
- MODULE_[A-Z_]+
+ MODULE_[A-Z_]+|
+ LOG_(?:DEBUG|INFO|WARNING|ERROR|USER|USER_N|OUTPUT)+
)};
our $signature_tags = qr{(?xi:
my ($root) = @_;
my @tree_check = (
- "COPYING", "CREDITS", "Kbuild", "MAINTAINERS", "Makefile",
- "README", "Documentation", "arch", "include", "drivers",
- "fs", "init", "ipc", "kernel", "lib", "scripts",
+ "AUTHORS", "BUGS", "COPYING", "HACKING", "Makefile.am",
+ "README", "contrib", "doc", "src", "tcl", "testing", "tools",
);
foreach my $check (@tree_check) {
$address = "";
$comment = "";
}
+ } elsif ($formatted_email eq "jenkins") {
+ $address = "jenkins"
}
$name =~ s/^\s+|\s+$//g;
# An else is really a conditional as long as its not else if
if ($level == 0 && $coff_set == 0 &&
(!defined($p) || $p =~ /(?:\s|\}|\+)/) &&
- $remainder =~ /^(else)(?:\s|{)/ &&
+ $remainder =~ /^(else)(?:\s|\{)/ &&
$remainder !~ /^else\s+if\b/) {
$coff = $off + length($1) - 1;
$coff_set = 1;
my ($stmt) = @_;
$stmt =~ s/(^|\n)./$1/g;
- $stmt =~ s/^\s*{//;
+ $stmt =~ s/^\s*\{//;
$stmt =~ s/}\s*$//;
$stmt =~ s/^\s*//;
$stmt =~ s/\s*$//;
print "ASSIGN($1)\n" if ($dbg_values > 1);
$type = 'N';
- } elsif ($cur =~/^(;|{|})/) {
+ } elsif ($cur =~/^(;|\{|})/) {
print "END($1)\n" if ($dbg_values > 1);
$type = 'E';
$av_pend_colon = 'O';
$rpt_cleaners = 1;
}
+ if ($rawline =~ /\bwrite to the Free/i ||
+ $rawline =~ /\b59\s+Temple\s+Pl/i ||
+ $rawline =~ /\b51\s+Franklin\s+St/i) {
+ my $herevet = "$here\n" . cat_vet($rawline) . "\n";
+ ERROR("FSF_MAILING_ADDRESS",
+ "Do not include the paragraph about writing to the Free Software Foundation's mailing address " .
+ "from the sample GPL notice. The FSF has changed addresses in the past, and may do so again. " .
+ "OpenOCD already includes a copy of the GPL.\n" . $herevet)
+ }
+
# check for Kconfig help text having a real description
# Only applies when adding the entry originally, after that we do not have
# sufficient context to determine whether it is indeed long enough.
# check we are in a valid source file if not then ignore this hunk
next if ($realfile !~ /\.(h|c|s|S|pl|sh)$/);
-#100 column limit
+#120 column limit
if ($line =~ /^\+/ && $prevrawline !~ /\/\*\*/ &&
$rawline !~ /^.\s*\*\s*\@$Ident\s/ &&
!($line =~ /^\+\s*$logFunctions\s*\(\s*(?:(KERN_\S+\s*|[^"]*))?"[X\t]*"\s*(?:|,|\)\s*;)\s*$/ ||
$line =~ /^\+\s*"[^"]*"\s*(?:\s*|,|\)\s*;)\s*$/) &&
- $length > 100)
+ $length > 120)
{
WARN("LONG_LINE",
- "line over 100 characters\n" . $herecurr);
+ "line over 120 characters\n" . $herecurr);
}
# check for spaces before a quoted newline
"please, no space before tabs\n" . $herevet);
}
+# check we are in a valid C source file if not then ignore this hunk
+ next if ($realfile !~ /\.(h|c)$/);
+
# check for spaces at the beginning of a line.
# Exceptions:
# 1) within comments
"please, no spaces at the start of a line\n" . $herevet);
}
-# check we are in a valid C source file if not then ignore this hunk
- next if ($realfile !~ /\.(h|c)$/);
-
# check for RCS/CVS revision markers
if ($rawline =~ /^\+.*\$(Revision|Log|Id)(?:\$|)/) {
WARN("CVS_KEYWORD",
}
my $s = $stat;
- $s =~ s/{.*$//s;
+ $s =~ s/\{.*$//s;
# Ignore goto labels.
if ($s =~ /$Ident:\*$/s) {
# Check for switch () and associated case and default
# statements should be at the same indent.
- if ($line=~/\bswitch\s*\(.*\)/) {
- my $err = '';
- my $sep = '';
- my @ctx = ctx_block_outer($linenr, $realcnt);
- shift(@ctx);
- for my $ctx (@ctx) {
- my ($clen, $cindent) = line_stats($ctx);
- if ($ctx =~ /^\+\s*(case\s+|default:)/ &&
- $indent != $cindent) {
- $err .= "$sep$ctx\n";
- $sep = '';
- } else {
- $sep = "[...]\n";
- }
- }
- if ($err ne '') {
- ERROR("SWITCH_CASE_INDENT_LEVEL",
- "switch and case should be at the same indent\n$hereline$err");
- }
- }
+# if ($line=~/\bswitch\s*\(.*\)/) {
+# my $err = '';
+# my $sep = '';
+# my @ctx = ctx_block_outer($linenr, $realcnt);
+# shift(@ctx);
+# for my $ctx (@ctx) {
+# my ($clen, $cindent) = line_stats($ctx);
+# if ($ctx =~ /^\+\s*(case\s+|default:)/ &&
+# $indent != $cindent) {
+# $err .= "$sep$ctx\n";
+# $sep = '';
+# } else {
+# $sep = "[...]\n";
+# }
+# }
+# if ($err ne '') {
+# ERROR("SWITCH_CASE_INDENT_LEVEL",
+# "switch and case should be at the same indent\n$hereline$err");
+# }
+# }
# if/while/etc brace do not go on next line, unless defining a do while loop,
# or if that brace on the next line is for something else
#print "realcnt<$realcnt> ctx_cnt<$ctx_cnt>\n";
#print "pre<$pre_ctx>\nline<$line>\nctx<$ctx>\nnext<$lines[$ctx_ln - 1]>\n";
- if ($ctx !~ /{\s*/ && defined($lines[$ctx_ln -1]) && $lines[$ctx_ln - 1] =~ /^\+\s*{/) {
+ if ($ctx !~ /\{\s*/ && defined($lines[$ctx_ln -1]) && $lines[$ctx_ln - 1] =~ /^\+\s*\{/) {
ERROR("OPEN_BRACE",
"that open brace { should be on the previous line\n" .
"$here\n$ctx\n$rawlines[$ctx_ln - 1]\n");
my $continuation = 0;
my $check = 0;
$s =~ s/^.*\bdo\b//;
- $s =~ s/^\s*{//;
+ $s =~ s/^\s*\{//;
if ($s =~ s/^\s*\\//) {
$continuation = 1;
}
#print "line<$line> prevline<$prevline> indent<$indent> sindent<$sindent> check<$check> continuation<$continuation> s<$s> cond_lines<$cond_lines> stat_real<$stat_real> stat<$stat>\n";
- if ($check && (($sindent % 8) != 0 ||
+ if ($check && (($sindent % 4) != 0 ||
($sindent <= $indent && $s ne ''))) {
WARN("SUSPECT_CODE_INDENT",
"suspect code indent for conditional statements ($indent, $sindent)\n" . $herecurr . "$stat_real\n");
}
# check for initialisation to aggregates open brace on the next line
- if ($line =~ /^.\s*{/ &&
+ if ($line =~ /^.\s*\{/ &&
$prevline =~ /(?:^|[^=])=\s*$/) {
ERROR("OPEN_BRACE",
"that open brace { should be on the previous line\n" . $hereprev);
# check for new typedefs, only function parameters and sparse annotations
# make sense.
- if ($line =~ /\btypedef\s/ &&
- $line !~ /\btypedef\s+$Type\s*\(\s*\*?$Ident\s*\)\s*\(/ &&
- $line !~ /\btypedef\s+$Type\s+$Ident\s*\(/ &&
- $line !~ /\b$typeTypedefs\b/ &&
- $line !~ /\b__bitwise(?:__|)\b/) {
- WARN("NEW_TYPEDEFS",
- "do not add new typedefs\n" . $herecurr);
- }
+# if ($line =~ /\btypedef\s/ &&
+# $line !~ /\btypedef\s+$Type\s*\(\s*\*?$Ident\s*\)\s*\(/ &&
+# $line !~ /\btypedef\s+$Type\s+$Ident\s*\(/ &&
+# $line !~ /\b$typeTypedefs\b/ &&
+# $line !~ /\b__bitwise(?:__|)\b/) {
+# WARN("NEW_TYPEDEFS",
+# "do not add new typedefs\n" . $herecurr);
+# }
# * goes on variable not on type
# (char*[ const])
# function brace can't be on same line, except for #defines of do while,
# or if closed on same line
- if (($line=~/$Type\s*$Ident\(.*\).*\s{/) and
- !($line=~/\#\s*define.*do\s{/) and !($line=~/}/)) {
+ if (($line=~/$Type\s*$Ident\(.*\).*\s\{/) and
+ !($line=~/\#\s*define.*do\s\{/) and !($line=~/}/)) {
ERROR("OPEN_BRACE",
"open brace '{' following function declarations go on the next line\n" . $herecurr);
}
# open braces for enum, union and struct go on the same line.
- if ($line =~ /^.\s*{/ &&
+ if ($line =~ /^.\s*\{/ &&
$prevline =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident)?\s*$/) {
ERROR("OPEN_BRACE",
"open brace '{' following $1 go on the same line\n" . $hereprev);
my ($where, $prefix) = ($-[1], $1);
if ($prefix !~ /$Type\s+$/ &&
($where != 0 || $prefix !~ /^.\s+$/) &&
- $prefix !~ /{\s+$/) {
+ $prefix !~ /\{\s+$/) {
ERROR("BRACKET_SPACE",
"space prohibited before open square bracket '['\n" . $herecurr);
}
## }
#need space before brace following if, while, etc
- if (($line =~ /\(.*\){/ && $line !~ /\($Type\){/) ||
- $line =~ /do{/) {
+ if (($line =~ /\(.*\)\{/ && $line !~ /\($Type\)\{/) ||
+ $line =~ /do\{/) {
ERROR("SPACING",
"space required before the open brace '{'\n" . $herecurr);
}
# Check for illegal assignment in if conditional -- and check for trailing
# statements after the conditional.
- if ($line =~ /do\s*(?!{)/) {
+ if ($line =~ /do\s*(?!\{)/) {
my ($stat_next) = ctx_statement_block($line_nr_next,
$remain_next, $off_next);
$stat_next =~ s/\n./\n /g;
substr($s, 0, length($c), '');
$s =~ s/\n.*//g;
$s =~ s/$;//g; # Remove any comments
- if (length($c) && $s !~ /^\s*{?\s*\\*\s*$/ &&
+ if (length($c) && $s !~ /^\s*\{?\s*\\*\s*$/ &&
$c !~ /}\s*while\s*/)
{
# Find out how long the conditional actually is.
if ($line =~ /^.\s*(?:}\s*)?else\b(.*)/) {
my $s = $1;
$s =~ s/$;//g; # Remove any comments
- if ($s !~ /^\s*(?:\sif|(?:{|)\s*\\?\s*$)/) {
+ if ($s !~ /^\s*(?:\sif|(?:\{|)\s*\\?\s*$)/) {
ERROR("TRAILING_STATEMENTS",
"trailing statements should be on next line\n" . $herecurr);
}
substr($block, 0, length($cond), '');
- $seen++ if ($block =~ /^\s*{/);
+ $seen++ if ($block =~ /^\s*\{/);
#print "cond<$cond> block<$block> allowed<$allowed>\n";
if (statement_lines($cond) > 1) {
}
# no volatiles please
- my $asm_volatile = qr{\b(__asm__|asm)\s+(__volatile__|volatile)\b};
- if ($line =~ /\bvolatile\b/ && $line !~ /$asm_volatile/) {
- WARN("VOLATILE",
- "Use of volatile is usually wrong: see Documentation/volatile-considered-harmful.txt\n" . $herecurr);
- }
+# my $asm_volatile = qr{\b(__asm__|asm)\s+(__volatile__|volatile)\b};
+# if ($line =~ /\bvolatile\b/ && $line !~ /$asm_volatile/) {
+# WARN("VOLATILE",
+# "Use of volatile is usually wrong: see Documentation/volatile-considered-harmful.txt\n" . $herecurr);
+# }
# warn about #if 0
if ($line =~ /^.\s*\#\s*if\s+0\b/) {
}
# Check for __attribute__ packed, prefer __packed
- if ($line =~ /\b__attribute__\s*\(\s*\(.*\bpacked\b/) {
- WARN("PREFER_PACKED",
- "__packed is preferred over __attribute__((packed))\n" . $herecurr);
- }
+# if ($line =~ /\b__attribute__\s*\(\s*\(.*\bpacked\b/) {
+# WARN("PREFER_PACKED",
+# "__packed is preferred over __attribute__((packed))\n" . $herecurr);
+# }
# Check for __attribute__ aligned, prefer __aligned
- if ($line =~ /\b__attribute__\s*\(\s*\(.*aligned/) {
- WARN("PREFER_ALIGNED",
- "__aligned(size) is preferred over __attribute__((aligned(size)))\n" . $herecurr);
- }
+# if ($line =~ /\b__attribute__\s*\(\s*\(.*aligned/) {
+# WARN("PREFER_ALIGNED",
+# "__aligned(size) is preferred over __attribute__((aligned(size)))\n" . $herecurr);
+# }
# check for sizeof(&)
if ($line =~ /\bsizeof\s*\(\s*\&/) {
}
# check for new externs in .c files.
- if ($realfile =~ /\.c$/ && defined $stat &&
- $stat =~ /^.\s*(?:extern\s+)?$Type\s+($Ident)(\s*)\(/s)
- {
- my $function_name = $1;
- my $paren_space = $2;
-
- my $s = $stat;
- if (defined $cond) {
- substr($s, 0, length($cond), '');
- }
- if ($s =~ /^\s*;/ &&
- $function_name ne 'uninitialized_var')
- {
- WARN("AVOID_EXTERNS",
- "externs should be avoided in .c files\n" . $herecurr);
- }
-
- if ($paren_space =~ /\n/) {
- WARN("FUNCTION_ARGUMENTS",
- "arguments for function declarations should follow identifier\n" . $herecurr);
- }
-
- } elsif ($realfile =~ /\.c$/ && defined $stat &&
- $stat =~ /^.\s*extern\s+/)
- {
- WARN("AVOID_EXTERNS",
- "externs should be avoided in .c files\n" . $herecurr);
- }
+# if ($realfile =~ /\.c$/ && defined $stat &&
+# $stat =~ /^.\s*(?:extern\s+)?$Type\s+($Ident)(\s*)\(/s)
+# {
+# my $function_name = $1;
+# my $paren_space = $2;
+#
+# my $s = $stat;
+# if (defined $cond) {
+# substr($s, 0, length($cond), '');
+# }
+# if ($s =~ /^\s*;/ &&
+# $function_name ne 'uninitialized_var')
+# {
+# WARN("AVOID_EXTERNS",
+# "externs should be avoided in .c files\n" . $herecurr);
+# }
+#
+# if ($paren_space =~ /\n/) {
+# WARN("FUNCTION_ARGUMENTS",
+# "arguments for function declarations should follow identifier\n" . $herecurr);
+# }
+#
+# } elsif ($realfile =~ /\.c$/ && defined $stat &&
+# $stat =~ /^.\s*extern\s+/)
+# {
+# WARN("AVOID_EXTERNS",
+# "externs should be avoided in .c files\n" . $herecurr);
+# }
# checks for new __setup's
if ($rawline =~ /\b__setup\("([^"]*)"/) {
$vname has style problems, please review.
If any of these errors are false positives, please report
-them to the maintainer, see CHECKPATCH in MAINTAINERS.
+them to the openocd-devel mailing list or prepare a patch
+and send it to Gerrit for review.
EOM
}