/cp
[official-gcc.git] / contrib / check_GNU_style.sh
blobe8d5dcaf7bc15a89d866f027e7145f2e920f6aed
1 #!/bin/sh
3 # Checks some of the GNU style formatting rules in a set of patches.
4 # Copyright (C) 2010, 2012 Free Software Foundation, Inc.
5 # Contributed by Sebastian Pop <sebastian.pop@amd.com>
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 usage() {
22 cat <<EOF
23 check_GNU_style.sh [patch]...
25 Checks the patches for some of the GNU style formatting problems.
26 When FILE is -, read standard input.
28 Please note that these checks are not always accurate, and
29 complete. The reference documentation of the GNU Coding Standards
30 can be found here: http://www.gnu.org/prep/standards_toc.html
31 and there are also some additional coding conventions for GCC:
32 http://gcc.gnu.org/codingconventions.html
34 EOF
35 exit 1
38 test $# -eq 0 && usage
40 inp=check_GNU_style.inp
41 tmp=check_GNU_style.tmp
43 # Remove $tmp on exit and various signals.
44 trap "rm -f $inp $tmp" 0
45 trap "rm -f $inp $tmp ; exit 1" 1 2 3 5 9 13 15
47 grep -nH '^+' $* \
48 | grep -v ':+++' \
49 > $inp
51 # Grep
52 g (){
53 msg="$1"
54 arg="$2"
55 cat $inp \
56 | egrep --color=always -- "$arg" \
57 > $tmp && printf "\n$msg\n"
58 cat $tmp
61 # And Grep
62 ag (){
63 msg="$1"
64 arg1="$2"
65 arg2="$3"
66 cat $inp \
67 | egrep --color=always -- "$arg1" \
68 | egrep --color=always -- "$arg2" \
69 > $tmp && printf "\n$msg\n"
70 cat $tmp
73 # reVerse Grep
74 vg (){
75 msg="$1"
76 varg="$2"
77 arg="$3"
78 cat $inp \
79 | egrep -v -- "$varg" \
80 | egrep --color=always -- "$arg" \
81 > $tmp && printf "\n$msg\n"
82 cat $tmp
85 col (){
86 msg="$1"
87 cat $inp \
88 | awk -F':\\+' '{ if (length($2) > 80) print $0}' \
89 > $tmp
90 if [ -s $tmp ]; then
91 printf "\n$msg\n"
92 cat $tmp
96 col 'Lines should not exceed 80 characters.'
98 g 'Blocks of 8 spaces should be replaced with tabs.' \
99 ' {8}'
101 g 'Trailing whitespace.' \
102 '[[:space:]]$'
104 g 'Space before dot.' \
105 '[[:alnum:]][[:blank:]]+\.'
107 g 'Dot, space, space, new sentence.' \
108 '[[:alnum:]]\.([[:blank:]]|[[:blank:]]{3,})[A-Z0-9]'
110 g 'Dot, space, space, end of comment.' \
111 '[[:alnum:]]\.([[:blank:]]{0,1}|[[:blank:]]{3,})\*/'
113 g 'Sentences should end with a dot. Dot, space, space, end of the comment.' \
114 '[[:alnum:]][[:blank:]]*\*/'
116 vg 'There should be exactly one space between function name and parentheses.' \
117 '\#define' '[[:alnum:]]([[:blank:]]{2,})?\('
119 g 'There should be no space before closing parentheses.' \
120 '[[:graph:]][[:blank:]]+\)'
122 ag 'Braces should be on a separate line.' \
123 '\{' 'if[[:blank:]]\(|while[[:blank:]]\(|switch[[:blank:]]\('