sane-project-backends/tools/style-check.sh

100 wiersze
2.6 KiB
Bash
Executable File

#!/bin/sh -u
# tools/style-check.sh -- for conformance or --fix to conform
# Copyright (C) 2017 Olaf Meeuwissen
#
# License: GPL-3.0+
check_final_newline() {
test x = "x$(tail -c 1 $1)"
}
insert_final_newline() {
check_final_newline $1 || echo >> $1
}
check_trailing_whitespace() {
test -z "$(sed -n '/[ \t]$/{p;q}' $1)"
}
trim_trailing_whitespace() {
sed -i 's/[ \t]*$//' $1
}
check_trailing_blank_lines() {
test -z "$(sed -n '${/^$/s/^/blank/p}' $1)"
}
trim_trailing_blank_lines() {
sed -i -e :a -e '/^\n*$/{$d;N;};/\n$/ba' $1
}
check_leading_blank_lines() {
test -z "$(sed -n '1{/^$/s/^/blank/p;q}' $1)"
}
trim_leading_blank_lines() {
sed -i '/./,$!d' $1
}
check_utf_8_charset() {
err=$(iconv -f utf-8 -t utf-8 < $1 2>&1 > /dev/null)
if test x != "x$err"; then
echo "charset not UTF-8: $1" >&2
echo "$err" >&2
return 1
fi
}
fix=false
case $1 in
--fix) fix=true; shift;;
esac
status=0
for file in "$@"; do
test -d $file && continue # skip directories, just in case
file=$(echo $file | sed 's,^\.\/,,')
case $file in
COPYING) ;; # hands off of the GPL
*.gif) ;; # don't touch image files
*.jpg) ;;
*.png) ;;
*.pnm) ;;
*.patch) ;; # patch output may have trailing lines or whitespace
Makefile.in) ;; # skip automake outputs
*/Makefile.in) ;;
aclocal.m4) ;; # skip autoconf outputs
include/sane/config.h.in) ;;
m4/libtool.m4) ;; # courtesy of libtool
m4/lt~obsolete.m4) ;;
ABOUT-NLS) ;; # courtesy of gettext
doc/doxygen-*.conf.in) ;; # don't fix doxygen -g comments
*)
if `$fix`; then
trim_trailing_whitespace $file
insert_final_newline $file
trim_trailing_blank_lines $file
else
if ! check_trailing_whitespace $file; then
status=1
echo "trailing whitespace: $file" >&2
fi
if ! check_final_newline $file; then
status=1
echo "final newline missing: $file" >&2
fi
if ! check_trailing_blank_lines $file; then
status=1
echo "trailing blank lines: $file" >&2
fi
if ! check_utf_8_charset $file; then
status=1
fi
fi
;;
esac
done
exit $status