190 lines
4.5 KiB
Bash
190 lines
4.5 KiB
Bash
|
#! /bin/sh
|
||
|
#
|
||
|
# Automated Testing Framework (atf)
|
||
|
#
|
||
|
# Copyright (c) 2007 The NetBSD Foundation, Inc.
|
||
|
# All rights reserved.
|
||
|
#
|
||
|
# Redistribution and use in source and binary forms, with or without
|
||
|
# modification, are permitted provided that the following conditions
|
||
|
# are met:
|
||
|
# 1. Redistributions of source code must retain the above copyright
|
||
|
# notice, this list of conditions and the following disclaimer.
|
||
|
# 2. Redistributions in binary form must reproduce the above copyright
|
||
|
# notice, this list of conditions and the following disclaimer in the
|
||
|
# documentation and/or other materials provided with the distribution.
|
||
|
#
|
||
|
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
|
||
|
# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||
|
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||
|
# IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
|
||
|
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||
|
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||
|
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||
|
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
#
|
||
|
|
||
|
#
|
||
|
# A utility to sanity check the coding style of all source files in the
|
||
|
# project tree.
|
||
|
#
|
||
|
|
||
|
Prog_Name=${0##*/}
|
||
|
|
||
|
#
|
||
|
# err message
|
||
|
#
|
||
|
err() {
|
||
|
echo "${Prog_Name}: ${@}" 1>&2
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# warn message
|
||
|
#
|
||
|
warn() {
|
||
|
echo "${Prog_Name}: ${@}" 1>&2
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# guess_topdir
|
||
|
#
|
||
|
# Locates the project's top directory and prints its path. The caller
|
||
|
# must verify if the result is correct or not.
|
||
|
#
|
||
|
guess_topdir() {
|
||
|
olddir=$(pwd)
|
||
|
topdir=$(pwd)
|
||
|
while [ ${topdir} != / ]; do
|
||
|
if [ -f ./atf-c.h ]; then
|
||
|
break
|
||
|
else
|
||
|
cd ..
|
||
|
topdir=$(pwd)
|
||
|
fi
|
||
|
done
|
||
|
cd ${olddir}
|
||
|
echo ${topdir}
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# find_sources
|
||
|
#
|
||
|
# Locates all source files within the project, relative to the current
|
||
|
# directory, and prints their paths.
|
||
|
#
|
||
|
find_sources() {
|
||
|
find . \( -name "AUTHORS" -o \
|
||
|
-name "COPYING" -o \
|
||
|
-name "ChangeLog" -o \
|
||
|
-name "NEWS" -o \
|
||
|
-name "README" -o \
|
||
|
-name "TODO" -o \
|
||
|
-name "*.[0-9]" -o \
|
||
|
-name "*.ac" -o \
|
||
|
-name "*.at" -o \
|
||
|
-name "*.awk" -o \
|
||
|
-name "*.c" -o \
|
||
|
-name "*.cpp" -o \
|
||
|
-name "*.h" -o \
|
||
|
-name "*.h.in" -o \
|
||
|
-name "*.hpp" -o \
|
||
|
-name "*.m4" -o \
|
||
|
-name "*.sh" \
|
||
|
\) -a \( \
|
||
|
\! -path "*/atf-[0-9]*" -a \
|
||
|
\! -path "*autom4te*" -a \
|
||
|
-type f -a \
|
||
|
\! -name "aclocal.m4" \
|
||
|
\! -name "bconfig.h" \
|
||
|
\! -name "defs.h" \
|
||
|
\! -name "libtool.m4" \
|
||
|
\! -name "ltoptions.m4" \
|
||
|
\! -name "ltsugar.m4" \
|
||
|
\! -name "lt~obsolete.m4" \
|
||
|
\! -name "*.so.*" \
|
||
|
\)
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# guess_formats file
|
||
|
#
|
||
|
# Guesses the formats applicable to the given file and prints the resulting
|
||
|
# list.
|
||
|
#
|
||
|
guess_formats() {
|
||
|
case ${1} in
|
||
|
*/ltmain.sh)
|
||
|
;;
|
||
|
*.[0-9])
|
||
|
echo common man
|
||
|
;;
|
||
|
*.c|*.h)
|
||
|
echo common c
|
||
|
;;
|
||
|
*.cpp|*.hpp)
|
||
|
echo common cpp
|
||
|
;;
|
||
|
*.sh)
|
||
|
echo common shell
|
||
|
;;
|
||
|
*)
|
||
|
echo common
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# check_file file
|
||
|
#
|
||
|
# Checks the validity of the given file.
|
||
|
#
|
||
|
check_file() {
|
||
|
err=0
|
||
|
for format in $(guess_formats ${1}); do
|
||
|
awk -f ${topdir}/admin/check-style-${format}.awk ${1} || err=1
|
||
|
done
|
||
|
|
||
|
return ${err}
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# main [file list]
|
||
|
#
|
||
|
# Entry point.
|
||
|
#
|
||
|
main() {
|
||
|
topdir=$(guess_topdir)
|
||
|
if [ ! -f ${topdir}/atf-c.h ]; then
|
||
|
err "Could not locate the project's top directory"
|
||
|
fi
|
||
|
|
||
|
if [ ${#} -gt 0 ]; then
|
||
|
sources=${@}
|
||
|
else
|
||
|
cd ${topdir}
|
||
|
sources=$(find_sources)
|
||
|
fi
|
||
|
|
||
|
ok=0
|
||
|
for file in ${sources}; do
|
||
|
file=$(echo ${file} | sed -e "s,\\./,,")
|
||
|
|
||
|
if [ ! -f ${file} ]; then
|
||
|
err "Could not open ${file}"
|
||
|
else
|
||
|
check_file ${file} || ok=1
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
return ${ok}
|
||
|
}
|
||
|
|
||
|
main "${@}"
|
||
|
|
||
|
# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4
|