#!/bin/sh

#
# This script checks for HAVE_ and ENABLE_ macros which are
# not included in config.h.in
#
# Usage:   checkconfig.sh <top_srcdir> <srcfile> [<srcfile> ...]
#
# Copyright (C) 2007 Matthias Koenig <mkoenig@suse.de>
# Copyright (C) 2008 Karel Zak <kzak@redhat.com>
#


die() {
	echo "error: $1"
	exit 1
}

usage() {
	echo "Usage:"
	echo " $0 <top_srcdir> <srcfile> [<srcfile> ...]"
	echo "Example:"
	echo " find . -name '*.c' | xargs $0 \$(git rev-parse --show-toplevel)"
}

if [ $# -eq 0 ]; then
	usage
	exit 1
fi
srcdir=$1
config="$srcdir/config.h.in"

[ -d "$srcdir" ] || die "$srcdir: not such directory."
[ -f "$config" ] || die "$config: not such file."

shift

while [ "$#" -ne 0 ]; do
	srcfile=$1
	shift

	[ ! -f "$srcfile" ] && continue;

	# Note that we use HAVE_ macros since util-linux-ng-2.14. The
	# previous version also have used ENABLE_ too.
	#
	# ENABLE_ and HAVE_ macros shouldn't be used for any other pupose that
	# for config/build options.
	#
	DEFINES=$(sed -n -e 's/.*[ \t(]\+\(HAVE_[[:alnum:]]\+[^ \t);]*\).*/\1/p' \
			 -e 's/.*[ \t(]\+\(ENABLE_[[:alnum:]]\+[^ \t);]*\).*/\1/p' \
                         $srcfile | sort -u)
	[ -z "$DEFINES" ] && continue

	for d in $DEFINES; do
		case $d in
		HAVE_CONFIG_H) continue
		   ;;
		*) grep -q "$d\( \|\>\)" $config || \
		     echo $(echo $srcfile | sed 's:\\'$srcdir/'::') ": $d"
	           ;;
		esac
	done
done
