Add BSD license file
[platform/upstream/db4.git] / dist / s_java_stat
1 #!/bin/sh -
2 #       $Id$
3 #
4 # Build the Java files.
5
6 msgjava="/*-
7  * Automatically built by dist/s_java_stat.
8  * Only the javadoc comments can be edited.
9  *
10  * See the file LICENSE for redistribution information.
11  *
12  * Copyright (c) 2002-2009 Oracle.  All rights reserved.
13  */"
14
15 s=/tmp/__java.sed
16 t=/tmp/__java
17 t0=/tmp/__java0
18 c=/tmp/__javajnic
19 u1=/tmp/__javautil1
20 u2=/tmp/__javautil2
21 trap 'rm -f $s $t $t0 $c $u1 $u2; exit 0' 0 1 2 3 13 15
22
23 # Script to convert DB C structure declarations into Java declarations.
24 jclass()
25 {
26         cat > $s <<EOF
27 /struct __db_$1 {/,/^}/{
28         /__db_$1/d
29         /CONFIG_TEST/,/#endif/d
30         /;/!d
31         /^}/d
32         /db_threadid_t/d
33         /char[   ]*/{
34                 s/^[     ]*char[*        ]*[     ]*\([^[;]*\).*/\\
35 $2    private String \1;\\
36 $2    public String get_\1() {\\
37 $2        return \1;\\
38 $2    }/p
39                 d
40         }
41         /db_seq_t/{
42                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/\\
43 $2    private long \1;\\
44 $2    public long get_\1() {\\
45 $2        return \1;\\
46 $2    }/p
47                 d
48         }
49         /time_t/{
50                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/\\
51 $2    private long \1;\\
52 $2    public long get_\1() {\\
53 $2        return \1;\\
54 $2    }/p
55                 d
56         }
57         /uintmax_t/{
58                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/\\
59 $2    private long \1;\\
60 $2    public long get_\1() {\\
61 $2        return \1;\\
62 $2    }/p
63                 d
64         }
65         /DB_LSN[         ]*/{
66                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/\\
67 $2    private LogSequenceNumber \1;\\
68 $2    public LogSequenceNumber get_\1() {\\
69 $2        return \1;\\
70 $2    }/p
71                 d
72         }
73         /DB_TXN_ACTIVE[  ]*\*/{
74                 s/^[     ]*[^\*]*\*[     ]*\([^;]*\).*/\\
75 $2    private Active[] \1;\\
76 $2    public Active[] get_\1() {\\
77 $2        return \1;\\
78 $2    }/p
79                 d
80         }
81         /u_int8_t[       ]*gid\[/{
82                 s/^[     ]*[^    ]*[     ]*\([^[;]*\).*/\\
83 $2    private byte[] \1;\\
84 $2    public byte[] get_\1() {\\
85 $2        return \1;\\
86 $2    }/p
87                 d
88         }
89         /u_int32_t.*startup_complete/{
90                 s/^[     ]*[^    ]*[     ]*\([^[;]*\).*/\\
91 $2    private int \1;\\
92 $2    public boolean get_\1() {\\
93 $2        return (\1 != 0);\\
94 $2    }/p
95                 d
96         }
97         s/^[     ]*[^    ]*[     ]*\([^;]*\).*/\\
98 $2    private int \1;\\
99 $2    public int get_\1() {\\
100 $2        return \1;\\
101 $2    }/p
102 }
103 EOF
104         sed -n -f $s < ../dbinc/db.in |
105         perl -w -p -e 's/get_(st|bt|hash|qs|compact)_/get_/;' \
106                    -e 'if (m/get.*\(/) {' \
107                    -e     's/_n([b-df-hj-np-tv-z]|upgrade)/_num_$1/;' \
108                    -e     's/_(min|max)([a-z])/_$1_$2/;' \
109                    -e     's/_mvcc/_multiversion/;' \
110                    -e     's/cnt/_count_/;' \
111                    -e     's/_pg/_pages_/;' \
112                    -e     's/(count|flag|free|page|percent|size|sync|timeout)/_$1/g;' \
113                    -e     's/([^p])(id\()/$1_$2/g;' \
114                    -e     's/__*/_/g;' \
115                    -e     's/_(.)/\U$1/g' \
116                    -e '};' \
117                    -e '1'
118 }
119
120 # Script to convert DB C structure declarations into a JNI method to fill the
121 # corresponding Java class
122 jclass_jni()
123 {
124         fill=__dbj_fill_$1
125         j_class=$2
126         jni_fieldid_decls $1 $2
127         jni_fieldids $1 $2
128         cat > $s <<EOF
129 /struct __db_$1 {/,/^}/{
130         /__db_$1/d
131         /CONFIG_TEST/,/#endif/d
132         /;/!d
133         /^}/d
134         /db_threadid_t/d
135         /char[   ]*/{
136                 s/^[     ]*char[*        ]*[     ]*\([^[;]*\).*/        JAVADB_STAT_STRING(jnienv, jobj, $1_\1_fid, statp, \1);/p
137                 d
138         }
139         /db_seq_t/{
140                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/ JAVADB_STAT_LONG(jnienv, jobj, $1_\1_fid, statp, \1);/p
141                 d
142         }
143         /time_t/{
144                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/ JAVADB_STAT_LONG(jnienv, jobj, $1_\1_fid, statp, \1);/p
145                 d
146         }
147         /uintmax_t/{
148                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/ JAVADB_STAT_LONG(jnienv, jobj, $1_\1_fid, statp, \1);/p
149                 d
150         }
151         /DB_LSN[         ]*/{
152                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/ JAVADB_STAT_LSN(jnienv, jobj, $1_\1_fid, statp, \1);/p
153                 d
154         }
155         /DB_TXN_ACTIVE[  ]*\*/{
156                 s/^[     ]*[^\*]*\*[     ]*\([^;]*\).*/ JAVADB_STAT_ACTIVE(jnienv, jobj, $1_\1_fid, statp, \1);/p
157                 d
158         }
159         /u_int8_t[       ]*gid\[/{
160                 s/^[     ]*[^    ]*[     ]*\([^[;]*\).*/        JAVADB_STAT_GID(jnienv, jobj, $1_\1_fid, statp, \1);/p
161                 d
162         }
163         s/^[     ]*[^    ]*[     ]*\([^;]*\).*/ JAVADB_STAT_INT(jnienv, jobj, $1_\1_fid, statp, \1);/p
164 }
165 EOF
166         echo "static int $fill(JNIEnv *jnienv," >> $c
167         echo "    jobject jobj, struct __db_$1 *statp) {" >> $c
168         sed -n -f $s < ../dbinc/db.in >> $c
169         echo '  return (0);' >> $c
170         echo '}' >> $c
171 }
172
173 jni_fieldid_decls()
174 {
175         cat > $s <<EOF
176 /struct __db_$1 {/,/^}/{
177         /__db_$1/d
178         /CONFIG_TEST/,/#endif/d
179         /;/!d
180         /^}/d
181         /db_threadid_t/d
182         /char[   ]*/{
183                 s/^[     ]*char[*        ]*[     ]*\([^[;]*\).*/static jfieldID $1_\1_fid;/p
184                 d
185         }
186         /db_seq_t/{
187                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p
188                 d
189         }
190         /time_t/{
191                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p
192                 d
193         }
194         /uintmax_t/{
195                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p
196                 d
197         }
198         /DB_LSN[         ]*/{
199                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p
200                 d
201         }
202         /DB_TXN_ACTIVE[  ]*\*/{
203                 s/^[     ]*[^\*]*\*[     ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p
204                 d
205         }
206         /u_int8_t[       ]*gid\[/{
207                 s/^[     ]*[^    ]*[     ]*\([^[;]*\).*/static jfieldID $1_\1_fid;/p
208                 d
209         }
210         s/^[     ]*[^    ]*[     ]*\([^;]*\).*/static jfieldID $1_\1_fid;/p
211 }
212 EOF
213         sed -n -f $s < ../dbinc/db.in >> $u1
214 }
215
216 jni_fieldids()
217 {
218         cat > $s <<EOF
219 /struct __db_$1 {/,/^}/{
220         /__db_$1/d
221         /CONFIG_TEST/,/#endif/d
222         /;/!d
223         /^}/d
224         /db_threadid_t/d
225         /char[   ]*/{
226                 s/^[     ]*char[*        ]*[     ]*\([^[;]*\).*/        { \&$1_\1_fid, \&$1_class, \"\1\", \"Ljava\/lang\/String;\" },/p
227                 d
228         }
229         /db_seq_t/{
230                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"J\" },/p
231                 d
232         }
233         /time_t/{
234                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"J\" },/p
235                 d
236         }
237         /uintmax_t/{
238                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"J\" },/p
239                 d
240         }
241         /DB_LSN[         ]*/{
242                 s/^[     ]*[^    ]*[     ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"L\" DB_PKG \"LogSequenceNumber;\" },/p
243                 d
244         }
245         /DB_TXN_ACTIVE[  ]*\*/{
246                 s/^[     ]*[^\*]*\*[     ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"[L\" DB_PKG \"TransactionStats\$Active;\" },/p
247                 d
248         }
249         /u_int8_t[       ]*gid\[/{
250                 s/^[     ]*[^    ]*[     ]*\([^[;]*\).*/        { \&$1_\1_fid, \&$1_class, \"\1\", \"[B\" },/p
251                 d
252         }
253         s/^[     ]*[^    ]*[     ]*\([^;]*\).*/ { \&$1_\1_fid, \&$1_class, \"\1\", \"I\" },/p
254 }
255 EOF
256         sed -n -f $s < ../dbinc/db.in >> $u2
257 }
258
259 # Script to convert DB C structure declarations into a toString method body
260 jclass_toString()
261 {
262         cat > $s <<EOF
263 /struct __db_$1 {/,/^}/{
264         /__db_$1/d
265         /CONFIG_TEST/,/#endif/d
266         /;/!d
267         /^}/d
268         /db_threadid_t/d
269         /char[   ]*/{
270                 s/^[     ]*char[*        ]*[     ]*\([^[;]*\).*/$3            + "\\\\n$3  \1=" + \1/p
271                 d
272         }
273         /DB_TXN_ACTIVE[  ]*\*/{
274                 s/^[     ]*[^\*]*\*[     ]*\([^;]*\).*/$3            + \"\\\\n$3  \1=\" + DbUtil.objectArrayToString(\1, \"\1\")/p
275                 d
276         }
277         /u_int8_t[       ]*gid\[/{
278                 s/^[     ]*[^    ]*[     ]*\([^[;]*\).*/$3            + \"\\\\n$3  \1=\" + DbUtil.byteArrayToString(\1)/p
279                 d
280         }
281         /u_int32_t.*startup_complete/{
282                 s/^[     ]*[^    ]*[     ]*\([^[;]*\).*/$3            + \"\\\\n$3  \1=\" + (\1 != 0)/p
283                 d
284         }
285         s/^[     ]*[^    ]*[     ]*\([^;]*\).*/$3            + \"\\\\n$3  \1=\" + \1/p
286 }
287 EOF
288         echo
289         echo "$3    public String toString() {"
290         echo "$3        return \"$2:\""
291         sed -n -f $s < ../dbinc/db.in
292         echo "$3            ;"
293         echo "$3    }"
294 }
295
296 stat_class()
297 {
298         c_struct=__db_$1
299         j_class=$2
300         extends=$3
301         imports=$4
302         extradecls=$5
303
304         (cat <<EOF
305 $msgjava
306
307 package com.sleepycat.db;
308 $imports
309 public class $j_class$extends {
310     // no public constructor
311     /* package */ $j_class() {}$extradecls
312 EOF
313          jclass $1
314          jclass_toString $1 $2
315          echo '}') > $t0
316         f=../java/src/com/sleepycat/db/$j_class.java
317         ./s_javadoc_merge $f $t0 > $t
318         cmp $t $f > /dev/null 2>&1 ||
319             (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
320         jclass_jni $1 $2
321 }
322
323 echo "$msgjava" > $c
324 > $u1
325 > $u2
326
327 stat_class bt_stat BtreeStats " extends DatabaseStats"
328
329 # Build CompactStats.java - not purely a statistics class, but close enough to
330 # share this code.
331 (cat <<EOF
332 $msgjava
333
334 package com.sleepycat.db;
335
336 import com.sleepycat.db.internal.DbUtil;
337
338 public class CompactStats
339 {
340     // no public constructor
341     /* package */ CompactStats() {}
342
343     /* package */
344     CompactStats(int fillpercent, int timeout, int pages) {
345         this.compact_fillpercent = fillpercent;
346         this.compact_timeout = timeout;
347         this.compact_pages = pages;
348     }
349 EOF
350  jclass compact
351  jclass_toString compact CompactStats
352  echo '}') |
353    perl -w -p -e 's,public int get(FillPercent|Pages\(|Timeout|Truncate),/* package */ int get$1,g;'> $t0
354 f=../java/src/com/sleepycat/db/CompactStats.java
355 ./s_javadoc_merge $f $t0 > $t
356 cmp $t $f > /dev/null 2>&1 ||
357     (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
358 jclass_jni compact __dbj_fill_compact
359
360 stat_class h_stat HashStats " extends DatabaseStats"
361 stat_class lock_stat LockStats
362 stat_class log_stat LogStats
363 stat_class mpool_fstat CacheFileStats
364 stat_class mpool_stat CacheStats
365 stat_class mutex_stat MutexStats
366 stat_class qam_stat QueueStats " extends DatabaseStats"
367 stat_class rep_stat ReplicationStats "" "
368 import com.sleepycat.db.internal.DbConstants;
369 " "
370     public static final int REP_CLIENT = DbConstants.DB_REP_CLIENT;
371
372     public static final int REP_MASTER = DbConstants.DB_REP_MASTER;
373
374     public static final int REP_NONE = 0;"
375
376 stat_class repmgr_stat ReplicationManagerStats
377 stat_class seq_stat SequenceStats
378
379 # Build TransactionStats.java - special because of embedded Active class
380 (echo "$msgjava"
381  echo
382  echo 'package com.sleepycat.db;'
383  echo
384  echo 'import com.sleepycat.db.internal.DbUtil;'
385  echo
386  echo 'public class TransactionStats'
387  echo '{'
388  echo "    // no public constructor"
389  echo "    /* package */ TransactionStats() {}"
390  echo
391  echo "    public static class Active {"
392  echo "        // no public constructor"
393  echo "        /* package */ Active() {}"
394  jclass txn_active "    "
395  jclass_toString txn_active Active "    "
396  echo '    };'
397  jclass txn_stat
398  jclass_toString txn_stat TransactionStats
399  echo '}') > $t0
400 f=../java/src/com/sleepycat/db/TransactionStats.java
401 ./s_javadoc_merge $f $t0 > $t
402 cmp $t $f > /dev/null 2>&1 ||
403     (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
404 jclass_jni txn_stat __dbj_fill_txn_stat
405 jclass_jni txn_active __dbj_fill_txn_active
406
407 mv $c $t
408 f=../libdb_java/java_stat_auto.c
409 cmp $t $f > /dev/null 2>&1 ||
410     (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
411
412 f=../libdb_java/java_util.i
413 sed '/BEGIN-STAT-FIELD-DECLS/q' < $f > $t
414 cat $u1 >> $t
415 sed -n '/END-STAT-FIELD-DECLS/,/BEGIN-STAT-FIELDS/p' < $f >> $t
416 cat $u2 >> $t
417 sed -n '/END-STAT-FIELDS/,$p' < $f >> $t
418 cmp $t $f > /dev/null 2>&1 ||
419     (echo "Building $f" && rm -f $f && cp $t $f && chmod 644 $f)