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