1#!/bin/sh -
2#
3# $Id: chk.define,v 12.5 2008/05/07 12:40:08 bschmeck Exp $
4#
5# Check to make sure that all #defines are actually used.
6# Check to make sure that all #defines start in column 1.
7
8d=../..
9
10[ -f $d/LICENSE ] || {
11	echo 'FAIL: cannot find source distribution directory.'
12	exit 1
13}
14
15exitv=0
16t1=__1
17t2=__2
18t3=__3
19
20find $d -name '*.c' -o -name '*.cpp' |
21    sed -e '/\/php_db4\//d' |
22    xargs egrep '^[	 ][	 ]*#' > $t1
23test -s $t1 && {
24	echo "FAIL: found #defines with leading white space:"
25	cat $t1
26	exit 1
27}
28
29egrep '^#define' $d/dbinc/*.h $d/dbinc/*.in |
30    sed -e '/db_185.in/d' -e '/queue.h/d' -e '/xa.h/d' |
31    awk '{print $2}' |
32    sed -e '/^AI_CANONNAME/d' \
33	-e '/^AI_NUMERICHOST/d' \
34	-e '/^B_DELETE/d' \
35	-e '/^B_MAX/d' \
36	-e '/^CHECK_THREAD/d' \
37	-e '/^DB_BTREEOLDVER/d' \
38	-e '/^DB_DEGREE_2/d' \
39	-e '/^DB_HASHOLDVER/d' \
40	-e '/^DB_LOCKVERSION/d' \
41	-e '/^DB_LOG_PERM_42_44/d' \
42	-e '/^DB_LOG_RESEND_42_44/d' \
43	-e '/^DB_MAX_PAGES/d' \
44	-e '/^DB_PAGE_QUEUE_LEN/d' \
45	-e '/^DB_QAMOLDVER/d' \
46	-e '/^DB_RETURNS_A_KEY_HASH/d' \
47	-e '/^DB_SPARE_FLAG/d' \
48	-e '/^DB_TXNVERSION/d' \
49	-e '/^DB_UNUSED/d' \
50	-e '/^DEFINE_DB_CLASS/d' \
51	-e '/^FHASH/d' \
52	-e '/^HASH_UNUSED/d' \
53	-e '/^HPUX_MUTEX_PAD/d' \
54	-e '/^LOG_OP/d' \
55	-e '/^MAX_ID/d' \
56	-e '/^MAXHOSTNAMELEN/d' \
57	-e '/^MINFILL/d' \
58	-e '/^MUTEX_FIELDS/d' \
59	-e '/^MUTEX_LOCK_PARTITION/d' \
60	-e '/^MUTEX_UNLOCK_PARTITION/d' \
61	-e '/^NAME_TO_SEQUENCE/d' \
62	-e '/^NCACHED2X/d' \
63	-e '/^NCACHED30/d' \
64	-e '/^PAIR_MASK/d' \
65	-e '/^P_16_COPY/d' \
66	-e '/^P_32_COPY/d' \
67	-e '/^P_32_SWAP/d' \
68	-e '/^P_64_COPY/d' \
69	-e '/^P_64_SWAP/d' \
70	-e '/^P_TO_UINT16/d' \
71	-e '/^QPAGE_CHKSUM/d' \
72	-e '/^QPAGE_NORMAL/d' \
73	-e '/^QPAGE_SEC/d' \
74	-e '/^SIZEOF_PAGE/d' \
75	-e '/^TAILQ_/d' \
76	-e '/^UINT64_FMT/d' \
77	-e '/^UINT64_MAX/d' \
78	-e '/^VM_PAGESIZE/d' \
79	-e '/^WRAPPED_CLASS/d' \
80	-e '/^_WIN32_WINNT/d' \
81	-e '/^__BIT_TYPES_DEFINED__/d' \
82	-e '/^__DBC_INTERNAL/d' \
83	-e '/^__STDC__/d' \
84	-e '/^__lock_locker_hash/d' \
85	-e '/^i_/d' \
86	-e '/_H_/d' \
87	-e 's/(.*//' | sort > $t1
88
89find $d -name '*.c' -o -name '*.cpp' > $t2
90for i in `cat $t1`; do
91	if egrep -w $i `cat $t2` > /dev/null; then
92	    :;
93	else
94	    f=`egrep -l "#define.*$i" $d/dbinc/*.h  $d/dbinc/*.in |
95	    sed 's;\.\.\/\.\.\/dbinc/;;' | tr -s "[:space:]" " "`
96	    echo "FAIL: $i: $f"
97	fi
98done | sort -k 2 > $t3
99
100test -s $t3 && {
101	cat $t3
102	echo "FAIL: found unused #defines"
103	exit 1
104}
105
106exit $exitv
107