1#!/bin/sh
2
3#
4# This script checks for HAVE_ and ENABLE_ macros which are
5# not included in config.h.in
6#
7# Usage:   checkconfig.sh <top_srcdir> <srcfile> [<srcfile> ...]
8#
9# Copyright (C) 2007 Matthias Koenig <mkoenig@suse.de>
10# Copyright (C) 2008 Karel Zak <kzak@redhat.com>
11#
12
13
14die() {
15	echo "error: $1"
16	exit 1
17}
18
19usage() {
20	echo "Usage:"
21	echo " $0 <top_srcdir> <srcfile> [<srcfile> ...]"
22	echo "Example:"
23	echo " find . -name '*.c' | xargs $0 \$(git rev-parse --show-toplevel)"
24}
25
26if [ $# -eq 0 ]; then
27	usage
28	exit 1
29fi
30srcdir=$1
31config="$srcdir/config.h.in"
32
33[ -d "$srcdir" ] || die "$srcdir: not such directory."
34[ -f "$config" ] || die "$config: not such file."
35
36shift
37
38while [ "$#" -ne 0 ]; do
39	srcfile=$1
40	shift
41
42	[ ! -f "$srcfile" ] && continue;
43
44	# Note that we use HAVE_ macros since util-linux-ng-2.14. The
45	# previous version also have used ENABLE_ too.
46	#
47	# ENABLE_ and HAVE_ macros shouldn't be used for any other pupose that
48	# for config/build options.
49	#
50	DEFINES=$(sed -n -e 's/.*[ \t(]\+\(HAVE_[[:alnum:]]\+[^ \t);]*\).*/\1/p' \
51			 -e 's/.*[ \t(]\+\(ENABLE_[[:alnum:]]\+[^ \t);]*\).*/\1/p' \
52                         $srcfile | sort -u)
53	[ -z "$DEFINES" ] && continue
54
55	for d in $DEFINES; do
56		case $d in
57		HAVE_CONFIG_H) continue
58		   ;;
59		*) grep -q "$d\( \|\>\)" $config || \
60		     echo $(echo $srcfile | sed 's:\\'$srcdir/'::') ": $d"
61	           ;;
62		esac
63	done
64done
65