#!/bin/sh

# Tests for the sourcecode base itself.
# Copyright 2006 by Mike Frysinger <vapier@gentoo.org>
# Licensed under GPL v2, see file LICENSE for details.

[ -n "$srcdir" ] || srcdir=$(pwd)
. testing.sh


#
# if we don't have the sourcecode available, let's just bail
#
[ -s "$srcdir/../Makefile" ] || exit 0
[ -s "$srcdir/../include/applets.h" ] || exit 0


#
# make sure all usage strings are properly escaped.  oftentimes people miss
# an escape sequence so we end up with:
# #define foo_usage \
#       " this line is ok" \
#       " as is this line"
#       " but this one is broken as the \ is missing from above"
#
${CROSS_COMPILE}cpp -dD -P $srcdir/../include/usage.h \
	| sed -e '/^#define/d' -e '/^$/d' > src.usage.escaped
testing "Usage strings escaped" "cat src.usage.escaped" "" "" ""
rm -f src.usage.escaped


#
# verify the applet order is correct in applets.h, otherwise
# applets won't be called properly.
#
sed -n -e '/^IF_[A-Z]*(APPLET/{s:,.*::;s:.*(::;s:"::g;p}' \
	$srcdir/../include/applets.h > applet.order.current
LC_ALL=C sort applet.order.current > applet.order.correct
testing "Applet order" "diff -u applet.order.current applet.order.correct" "" "" ""
rm -f applet.order.current applet.order.correct


#
# check for misc common typos
#
find $srcdir/../ \
	'(' -type d -a '(' -name .svn -o -name testsuite ')' -prune ')' \
	-o '(' -type f -a -print0 ')' | xargs -0 \
	grep -I \
		-e '\<compatability\>' \
		-e '\<compatable\>' \
		-e '\<fordeground\>' \
		-e '\<depency\>' -e '\<dependancy\>' -e '\<dependancies\>' \
		-e '\<defalt\>' \
		-e '\<remaing\>' \
		-e '\<queueing\>' \
		-e '\<detatch\>' \
		-e '\<sempahore\>' \
		-e '\<reprenstative\>' \
		-e '\<overriden\>' \
		-e '\<readed\>' \
		-e '\<formated\>' \
		-e '\<algorithic\>' \
		-e '\<deamon\>' \
		-e '\<derefernce\>' \
		-e '\<acomadate\>' \
		| sed -e "s:^$srcdir/\.\./::g" > src.typos
testing "Common typos" "cat src.typos" "" "" ""
rm -f src.typos


#
# don't allow obsolete functions
#
find $srcdir/.. '(' -name '*.c' -o -name '*.h' ')' -print0 | xargs -0 \
	grep -E -e '\<(bcmp|bcopy|bzero|getwd|index|mktemp|rindex|utimes|sigblock|siggetmask|sigsetmask)\>[[:space:]]*\(' \
	| sed -e "s:^$srcdir/\.\./::g" > src.obsolete.funcs
testing "Obsolete function usage" "cat src.obsolete.funcs" "" "" ""
rm -f src.obsolete.funcs


#
# don't allow obsolete headers
#
find $srcdir/.. '(' -name '*.c' -o -name '*.h' ')' -print0 | xargs -0 \
	grep -E -e '\<(malloc|memory|sys/(errno|fcntl|signal|stropts|termios|unistd))\.h\>' \
	| sed -e "s:^$srcdir/\.\./::g" > src.obsolete.headers
testing "Obsolete headers" "cat src.obsolete.headers" "" "" ""
rm -f src.obsolete.headers


exit $FAILCOUNT
