X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=tools%2Fscripts%2Fcheckpatch.pl;h=b3a085483bc1156c46590b059ae5113dedc93fef;hp=0b3e35c9ef08552b4b67f62479895ad826388523;hb=4525c0a4c4d0aaa199c37a6d2245617e8445f213;hpb=efbafd9dc8c30b66755a3a840fe58bd573cec1db diff --git a/tools/scripts/checkpatch.pl b/tools/scripts/checkpatch.pl old mode 100644 new mode 100755 index 0b3e35c9ef..b3a085483b --- a/tools/scripts/checkpatch.pl +++ b/tools/scripts/checkpatch.pl @@ -43,7 +43,7 @@ Version: $V 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 @@ -52,7 +52,7 @@ Options: --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 @@ -165,14 +165,14 @@ if ($tree) { } 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); } } @@ -261,7 +261,8 @@ our $logFunctions = qr{(?x: [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: @@ -400,9 +401,8 @@ sub top_of_kernel_tree { 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) { @@ -445,6 +445,8 @@ sub parse_email { $address = ""; $comment = ""; } + } elsif ($formatted_email eq "jenkins") { + $address = "jenkins" } $name =~ s/^\s+|\s+$//g; @@ -504,7 +506,7 @@ sub expand_tabs { if ($c eq "\t") { $res .= ' '; $n++; - for (; ($n % 8) != 0; $n++) { + for (; ($n % 4) != 0; $n++) { $res .= ' '; } next; @@ -1629,6 +1631,14 @@ sub process { $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"; + my $msg_type = \&ERROR; + ERROR("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. Linux 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. @@ -1664,15 +1674,15 @@ sub process { # check we are in a valid source file if not then ignore this hunk next if ($realfile !~ /\.(h|c|s|S|pl|sh)$/); -#80 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 > 80) + $length > 120) { WARN("LONG_LINE", - "line over 80 characters\n" . $herecurr); + "line over 120 characters\n" . $herecurr); } # check for spaces before a quoted newline @@ -1721,6 +1731,9 @@ sub process { "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 @@ -1732,9 +1745,6 @@ sub process { "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", @@ -1823,26 +1833,26 @@ sub process { # 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 @@ -1965,7 +1975,7 @@ sub process { #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"); @@ -2121,14 +2131,14 @@ sub process { # 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]) @@ -2961,11 +2971,11 @@ sub process { } # 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/) { @@ -3064,16 +3074,16 @@ sub process { } # 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*\&/) { @@ -3088,34 +3098,34 @@ sub process { } # 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\("([^"]*)"/) { @@ -3329,7 +3339,8 @@ sub process { $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 }