1#!/bin/sh - 2# $Id$ 3# 4# Build the Java files. 5 6msgjava="/*- 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 15s=/tmp/__java.sed 16t=/tmp/__java 17t0=/tmp/__java0 18c=/tmp/__javajnic 19u1=/tmp/__javautil1 20u2=/tmp/__javautil2 21trap '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. 24jclass() 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} 103EOF 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 122jclass_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} 165EOF 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 173jni_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} 212EOF 213 sed -n -f $s < ../dbinc/db.in >> $u1 214} 215 216jni_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} 255EOF 256 sed -n -f $s < ../dbinc/db.in >> $u2 257} 258 259# Script to convert DB C structure declarations into a toString method body 260jclass_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} 287EOF 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 296stat_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 307package com.sleepycat.db; 308$imports 309public class $j_class$extends { 310 // no public constructor 311 /* package */ $j_class() {}$extradecls 312EOF 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 323echo "$msgjava" > $c 324> $u1 325> $u2 326 327stat_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 334package com.sleepycat.db; 335 336import com.sleepycat.db.internal.DbUtil; 337 338public 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 } 349EOF 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 354f=../java/src/com/sleepycat/db/CompactStats.java 355./s_javadoc_merge $f $t0 > $t 356cmp $t $f > /dev/null 2>&1 || 357 (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f) 358jclass_jni compact __dbj_fill_compact 359 360stat_class h_stat HashStats " extends DatabaseStats" 361stat_class lock_stat LockStats 362stat_class log_stat LogStats 363stat_class mpool_fstat CacheFileStats 364stat_class mpool_stat CacheStats 365stat_class mutex_stat MutexStats 366stat_class qam_stat QueueStats " extends DatabaseStats" 367stat_class rep_stat ReplicationStats "" " 368import 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 376stat_class repmgr_stat ReplicationManagerStats 377stat_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 400f=../java/src/com/sleepycat/db/TransactionStats.java 401./s_javadoc_merge $f $t0 > $t 402cmp $t $f > /dev/null 2>&1 || 403 (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f) 404jclass_jni txn_stat __dbj_fill_txn_stat 405jclass_jni txn_active __dbj_fill_txn_active 406 407mv $c $t 408f=../libdb_java/java_stat_auto.c 409cmp $t $f > /dev/null 2>&1 || 410 (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f) 411 412f=../libdb_java/java_util.i 413sed '/BEGIN-STAT-FIELD-DECLS/q' < $f > $t 414cat $u1 >> $t 415sed -n '/END-STAT-FIELD-DECLS/,/BEGIN-STAT-FIELDS/p' < $f >> $t 416cat $u2 >> $t 417sed -n '/END-STAT-FIELDS/,$p' < $f >> $t 418cmp $t $f > /dev/null 2>&1 || 419 (echo "Building $f" && rm -f $f && cp $t $f && chmod 644 $f) 420