chk.rpc   [plain text]


#!/bin/sh -
#
# $Id: chk.rpc,v 1.2 2006/09/11 15:40:46 bostic Exp $
#
# Check to make sure that the code samples in the documents build.

r=../../rpc_server/rpc.src
i=../../dbinc/db.in

t1=__1
t2=__2

[ -d ../../dbinc ] || {
	echo 'FAIL: cannot find source distribution directory.'
	exit 1
}

exitv=0

# $1: handle name
# $2: handle prefix
# $3: method file
check()
{
	echo "==== Checking $1/$2..."

	# Build a list of DB_ENV handle methods from the include file.
	sed -e "/$1 PUBLIC HANDLE LIST BEGIN/,/$1 PUBLIC HANDLE LIST END/p" \
	    -e d < $i |
	grep '[\* ](\*[a-z]' |
	sed -e 's/).*$//' \
	    -e 's/.*(\*//' \
	    -e '/^$/d' > $t1

	# Build a list of handle methods from the rpc.src file.
	egrep '^BEGIN|^LOCAL|^NOFUNC' $r |
	awk '{print $2}' |
	egrep "^$2_" |
	sed -e "/^$2_create/d" \
	    -e "s/$2_//" > $t2

	if cmp -s $t1 $t2 ; then
		:
	else
		echo "FAIL: $1 handle methods do not match."
		echo "<<< dbinc/db.in >>> rpc_server/rpc.src"
		diff $t1 $t2
		exit 1
	fi

	if [ -z "$3" ]; then
		return
	fi

	# Build a list of handle methods from the env/env_method.c and
	# db/db_method.c files.
	sed -e "/$1 PUBLIC HANDLE LIST BEGIN/,/$1 PUBLIC HANDLE LIST END/p" \
	    -e d < "$3" |
	sed -e '/^#ifdef.HAVE_REPLICATION_THREADS/d' \
	    -e '/^#else.*HAVE_REPLICATION_THREADS/,/^#endif/d' \
	    -e '/PUBLIC/d' \
	    -e 's/ = .*//' \
	    -e 's/^.*->//' > $t2

	if cmp -s $t1 $t2 ; then
		:
	else
		echo "FAIL: $1 handle methods do not match."
		echo "<<< dbinc/db.in >>> $3"
		diff $t1 $t2
		exit 1
	fi
}

# We don't check the DB handle method limits from db/db_method.c, DB handle
# methods are set in per-access method routines, they aren't consolidated.
check DB db
check DBC dbc
check DB_ENV env ../../env/env_method.c
check DB_TXN txn

exit $exitv