]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/atf/admin/check-style.sh
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
[FreeBSD/stable/10.git] / contrib / atf / admin / check-style.sh
1 #! /bin/sh
2 #
3 # Automated Testing Framework (atf)
4 #
5 # Copyright (c) 2007 The NetBSD Foundation, Inc.
6 # All rights reserved.
7 #
8 # Redistribution and use in source and binary forms, with or without
9 # modification, are permitted provided that the following conditions
10 # are met:
11 # 1. Redistributions of source code must retain the above copyright
12 #    notice, this list of conditions and the following disclaimer.
13 # 2. Redistributions in binary form must reproduce the above copyright
14 #    notice, this list of conditions and the following disclaimer in the
15 #    documentation and/or other materials provided with the distribution.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
18 # CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
19 # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
20 # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 # IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
22 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
24 # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
26 # IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
28 # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #
30
31 #
32 # A utility to sanity check the coding style of all source files in the
33 # project tree.
34 #
35
36 Prog_Name=${0##*/}
37
38 #
39 # err message
40 #
41 err() {
42     echo "${Prog_Name}: ${@}" 1>&2
43     exit 1
44 }
45
46 #
47 # warn message
48 #
49 warn() {
50     echo "${Prog_Name}: ${@}" 1>&2
51 }
52
53 #
54 # guess_topdir
55 #
56 # Locates the project's top directory and prints its path.  The caller
57 # must verify if the result is correct or not.
58 #
59 guess_topdir() {
60     olddir=$(pwd)
61     topdir=$(pwd)
62     while [ ${topdir} != / ]; do
63         if [ -f ./atf-c.h ]; then
64             break
65         else
66             cd ..
67             topdir=$(pwd)
68         fi
69     done
70     cd ${olddir}
71     echo ${topdir}
72 }
73
74 #
75 # find_sources
76 #
77 # Locates all source files within the project, relative to the current
78 # directory, and prints their paths.
79 #
80 find_sources() {
81     find . \( -name "AUTHORS" -o \
82               -name "COPYING" -o \
83               -name "ChangeLog" -o \
84               -name "NEWS" -o \
85               -name "README" -o \
86               -name "TODO" -o \
87               -name "*.[0-9]" -o \
88               -name "*.ac" -o \
89               -name "*.at" -o \
90               -name "*.awk" -o \
91               -name "*.c" -o \
92               -name "*.cpp" -o \
93               -name "*.h" -o \
94               -name "*.h.in" -o \
95               -name "*.hpp" -o \
96               -name "*.m4" -o \
97               -name "*.sh" \
98            \) -a \( \
99               \! -path "*/atf-[0-9]*" -a \
100               \! -path "*autom4te*" -a \
101               -type f -a \
102               \! -name "aclocal.m4" \
103               \! -name "bconfig.h" \
104               \! -name "defs.h" \
105               \! -name "libtool.m4" \
106               \! -name "ltoptions.m4" \
107               \! -name "ltsugar.m4" \
108               \! -name "lt~obsolete.m4" \
109               \! -name "*.so.*" \
110            \)
111 }
112
113 #
114 # guess_formats file
115 #
116 # Guesses the formats applicable to the given file and prints the resulting
117 # list.
118 #
119 guess_formats() {
120     case ${1} in
121         */ltmain.sh)
122             ;;
123         *.[0-9])
124             echo common man
125             ;;
126         *.c|*.h)
127             echo common c
128             ;;
129         *.cpp|*.hpp)
130             echo common cpp
131             ;;
132         *.sh)
133             echo common shell
134             ;;
135         *)
136             echo common
137             ;;
138     esac
139 }
140
141 #
142 # check_file file
143 #
144 # Checks the validity of the given file.
145 #
146 check_file() {
147     err=0
148     for format in $(guess_formats ${1}); do
149         awk -f ${topdir}/admin/check-style-${format}.awk ${1} || err=1
150     done
151
152     return ${err}
153 }
154
155 #
156 # main [file list]
157 #
158 # Entry point.
159 #
160 main() {
161     topdir=$(guess_topdir)
162     if [ ! -f ${topdir}/atf-c.h ]; then
163         err "Could not locate the project's top directory"
164     fi
165
166     if [ ${#} -gt 0 ]; then
167         sources=${@}
168     else
169         cd ${topdir}
170         sources=$(find_sources)
171     fi
172
173     ok=0
174     for file in ${sources}; do
175         file=$(echo ${file} | sed -e "s,\\./,,")
176
177         if [ ! -f ${file} ]; then
178             err "Could not open ${file}"
179         else
180             check_file ${file} || ok=1
181         fi
182     done
183
184     return ${ok}
185 }
186
187 main "${@}"
188
189 # vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4