1#!/bin/sh -
2#
3# Reconcile the list of public defines with the man pages and the Java files.
4
5d=../..
6docs=$d/docs_src
7
8[ -f $d/LICENSE ] || {
9	echo 'FAIL: cannot find source distribution directory.'
10	exit 1
11}
12
13p=$d/dist/pubdef.in
14
15exitv=0
16
17cat <<END_OF_TEXT
18=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
19Check that pubdef.in has everything listed in m4.links.
20=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21END_OF_TEXT
22
23f=$docs/m4/m4.links
24sed -n \
25    -e 's/^\$1, \(DB_[^,]*\).*/\1/p' \
26    -e d < $f |
27while read name; do
28	if `egrep -w "$name" $p > /dev/null`; then
29		:
30	else
31		echo "$f: $name is missing from $p"
32		exitv=1
33	fi
34done
35
36cat <<END_OF_TEXT
37=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
38Check that m4.links has everything listed in pubdef.in.
39=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
40END_OF_TEXT
41
42f=$docs/m4/m4.links
43sed '/^#/d' $p |
44while read name isdoc isinc isjava; do
45	if `egrep -w "^.1, $name" $f > /dev/null`; then
46		[ "X$isdoc" != "XD" ] && {
47			echo "$name should not appear in $f"
48			exitv=1
49		}
50	else
51		[ "X$isdoc" = "XD" ] && {
52			echo "$name does not appear in $f"
53			exitv=1;
54		}
55	fi
56done
57
58cat <<END_OF_TEXT
59=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
60Check that pubdef.in has everything listed in db.in plus api_flags.in.
61=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
62END_OF_TEXT
63
64cat $d/dbinc/db.in $d/dbinc_auto/api_flags.in | sed -n \
65    -e 's/^#define[	 ]*\(DB_[A-Z_0-9][A-Z_0-9]*\).*/\1/p' \
66    -e 's/^[	 ]*\(DB_[A-Z_]*\)=[0-9].*/\1/p' \
67    -e d |
68while read name; do
69	if `egrep -w "$name" $p > /dev/null`; then
70		:
71	else
72		echo "db.in/api_flags.in: $name is missing from $p"
73		exitv=1
74	fi
75done
76
77cat <<END_OF_TEXT
78=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
79Check that api_flags.in plus db.in has everything listed in pubdef.in.
80=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
81END_OF_TEXT
82
83sed '/^#/d' $p |
84while read name isdoc isinc isjava; do
85	if `egrep -w "#define[	 ]$name|[	 ][	 ]*$name=[0-9][0-9]*" \
86	    $d/dbinc/db.in $d/dbinc_auto/api_flags.in > /dev/null`; then
87		[ "X$isinc" != "XI" ] && {
88			echo "$name should not appear in db.in/api_flags.in"
89			exitv=1
90		}
91	else
92		[ "X$isinc" = "XI" ] && {
93			echo "$name does not appear in db.in/api_flags.in"
94			exitv=1
95		}
96	fi
97done
98
99cat <<END_OF_TEXT
100=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
101Check that pubdef.in has everything listed in DbConstants.java.
102=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
103END_OF_TEXT
104
105j=$d/java/src/com/sleepycat/db
106f=$j/internal/DbConstants.java
107sed -n -e 's/.*int[	 ]\([^ 	]*\).*;/\1/p' < $f |
108while read name; do
109	if `egrep -w "$name" $p > /dev/null`; then
110		:
111	else
112		echo "$f: $name is missing from $p"
113		exitv=1
114	fi
115done
116
117cat <<END_OF_TEXT
118=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
119Check that DbConstants.java has everything listed in pubdef.in.
120=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
121END_OF_TEXT
122
123f=$j/internal/DbConstants.java
124sed '/^#/d' $p |
125while read name isdoc isinc isjava; do
126	if `egrep -w "int[	 ]$name =" $f > /dev/null`; then
127		[ "X$isjava" != "XJ" ] && {
128			echo "$name should not appear in $f"
129			exitv=1
130		}
131	else
132		[ "X$isjava" = "XJ" ] && {
133			echo "$name does not appear in $f"
134			exitv=1
135		}
136	fi
137done
138
139cat <<END_OF_TEXT
140=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
141Check that all constants in pubdef.in are wrapped by the Java API.
142=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
143END_OF_TEXT
144
145#Strip out Javadoc comments
146t=__1
147cat $j/*.java $d/rpc_server/java/*.java \
148    $j/internal/Db.java $j/internal/DbEnv.java \
149    $j/internal/db_javaJNI.java | sed '/\/\*\*/,/\*\// d' > $t
150
151sed '/^#/d' $p |
152while read name isdoc isinc isjava; do
153	if `egrep -w "$name" $t > /dev/null`; then
154		[ "X$isjava" != "XJ" ] && {
155			echo "$name should not appear in the Java API"
156			exitv=1
157		}
158	else
159		[ "X$isjava" = "XJ" ] && {
160			echo "$name does not appear in the Java API"
161			exitv=1
162		}
163	fi
164done
165
166cat <<END_OF_TEXT
167=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
168Check that all constants in pubdef.in are wrapped by the Java native layer.
169=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
170END_OF_TEXT
171
172sed '/^#/d' $p |
173while read name isdoc isinc isjava; do
174	if `egrep -w "$name" $d/libdb_java/db_java_wrap.c > /dev/null`; then
175		[ "X$isjava" != "XN" ] && [ "X$isjava" != "XJ" ] && {
176			echo "$name should not appear in the Java native layer"
177			exitv=1
178		}
179	else
180		[ "X$isjava" = "XN" ] && {
181			echo "$name does not appear in the Java native layer"
182			exitv=1
183		}
184	fi
185done
186
187exit $exitv
188