#!/bin/sh -
#
# $Id: chk.flags,v 1.8 2002/08/14 02:19:55 bostic Exp $
#
# Check flag name-spaces.

d=../..

t1=__1

# Check for DB_ENV flags.
(grep 'F_ISSET([^ ]*dbenv,' $d/*/*.[chys];
 grep 'F_SET([^ ]*dbenv,' $d/*/*.[chys];
 grep 'F_CLR([^ ]*dbenv,' $d/*/*.[chys]) |
 sed -e '/DB_ENV_/d' -e '/F_SET([^ ]*dbenv, db_env_reset)/d' > $t1
[ -s $t1 ] && {
	cat $t1
	exit 1
}

grep 'DB_ENV_' $d/*/*.c |
sed -e '/F_.*dbenv,/d' \
    -e '/DB_ENV_TEST_RECOVERY(.*DB_TEST_/d' \
    -e '/\/libdb_java\//d' > $t1
[ -s $t1 ] && {
	cat $t1
	exit 1
}

# Check for DB flags.
(grep 'F_ISSET([^ ]*dbp,' $d/*/*.[chys];
 grep 'F_SET([^ ]*dbp,' $d/*/*.[chys];
 grep 'F_CLR([^ ]*dbp,' $d/*/*.[chys]) |
 sed -e '/DB_AM_/d' \
     -e '/db.c:.*F_SET.*F_ISSET(subdbp,/d' > $t1
[ -s $t1 ] && {
	cat $t1
	exit 1
}

grep 'DB_AM_' $d/*/*.c |
sed -e '/F_.*dbp/d' \
    -e '/"DB->open", dbp->flags, DB_AM_DUP,/d' \
    -e '/"DB_NODUPDATA" behavior for databases with/d' \
    -e '/If DB_AM_OPEN_CALLED is not set, then we/d' \
    -e '/This was checked in set_flags when DB_AM_ENCRYPT/d' \
    -e '/XA_ABORT, we can safely set DB_AM_RECOVER/d' \
    -e '/ DB_AM_RECNUM\./d' \
    -e '/ DB_AM_RECOVER set\./d' \
    -e '/isdup = dbp->flags & DB_AM_DUP/d' \
    -e '/otherwise we simply do/d' \
    -e '/pginfo/d' \
    -e '/setting DB_AM_RECOVER, we guarantee that we don/d' \
    -e '/:[	 {]*DB_AM_/d' > $t1
[ -s $t1 ] && {
	cat $t1
	exit 1
}

# Check for DBC flags.
(grep 'F_ISSET([^ ]*dbc,' $d/*/*.[chys];
 grep 'F_SET([^ ]*dbc,' $d/*/*.[chys];
 grep 'F_CLR([^ ]*dbc,' $d/*/*.[chys]) |
 sed -e '/DBC_/d' > $t1
[ -s $t1 ] && {
	cat $t1
	exit 1
}

grep 'DBC_' $d/*/*.c |
sed -e '/F_.*dbc/d' \
    -e '/DBC_INTERNAL/d' \
    -e '/DBC_LOGGING/d' \
    -e '/Do the actual get.  Set DBC_TRANSIENT/d' \
    -e '/If DBC_WRITEDUP is set, the cursor is an in/d' \
    -e '/The DBC_TRANSIENT flag indicates that we/d' \
    -e '/This function replaces the DBC_CONTINUE and DBC_KEYSET/d' \
    -e '/db_cam.c:.*F_CLR(opd, DBC_ACTIVE);/d' \
    -e '/{ DBC_/d' > $t1
[ -s $t1 ] && {
	cat $t1
	exit 1
}

# Check for bad use of macros.
egrep 'case .*F_SET\(|case .*F_CLR\(' $d/*/*.c > $t1
egrep 'for .*F_SET\(|for .*F_CLR\(' $d/*/*.c >> $t1
egrep 'if .*F_SET\(|if .*F_CLR\(' $d/*/*.c >> $t1
egrep 'switch .*F_SET\(|switch .*F_CLR\(' $d/*/*.c >> $t1
egrep 'while .*F_SET\(|while .*F_CLR\(' $d/*/*.c >> $t1
[ -s $t1 ] && {
	echo 'if statement followed by non-test macro'
	cat $t1
	exit 1
}

exit 0
