summaryrefslogtreecommitdiff
path: root/bdb/dist/s_rpc
blob: 302930068ca26a899a21ab84f6b9337b5cdba777 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/bin/sh -
#	$Id: s_rpc,v 11.18 2002/08/15 15:22:09 bostic Exp $
#
# Build the automatically generated RPC files

echo "Building RPC client/server files"

. ./RELEASE

t=/tmp/__db_a
trap 'rm -f $t ; exit 0' 0
trap 'rm -f $t ; exit 1' 1 2 3 13 15

client_file=../rpc_client/gen_client.c
ctmpl_file=./template/gen_client_ret
dbinc_file=../dbinc/db.in
defs_file=../dbinc_auto/rpc_defs.in
header_file=../dbinc_auto/db_server.h
proc_file=../rpc_server/c/db_server_proc.c
rpcclnt_file=../rpc_client/db_server_clnt.c
rpcsvc_file=../rpc_server/c/db_server_svc.c
rpcxdr_file=../rpc_server/c/db_server_xdr.c
sed_file=../rpc_server/c/db_server_proc.sed
server_file=../rpc_server/c/gen_db_server.c
stmpl_file=./template/db_server_proc
xdr_file=../rpc_server/db_server.x

#
# NOTE: We do NOT want to remove proc_file.  It is what we apply $sed_file
# to, but we do not want to remove it, it does not get built in place.
rm -f   $client_file \
	$ctmpl_file \
	$header_file \
	$rpcclnt_file \
	$rpcsvc_file \
	$rpcxdr_file \
	$sed_file \
	$server_file \
	$stmpl_file \
	$xdr_file

#
# Generate client/server/XDR code
#
xidsize=\
`awk '/^#define/ { if ($2 == "DB_XIDDATASIZE") { print $3 }}' $dbinc_file`

awk -f gen_rpc.awk \
    -v major=$DB_VERSION_MAJOR \
    -v minor=$DB_VERSION_MINOR \
    -v xidsize=$xidsize \
    -v client_file=$client_file \
    -v ctmpl_file=$ctmpl_file \
    -v sed_file=$sed_file \
    -v server_file=$server_file \
    -v stmpl_file=$stmpl_file \
    -v xdr_file=$xdr_file < ../rpc_server/rpc.src
chmod 444 $client_file $server_file

#
# Now run rpcgen to generate all our sources from the XDR file
#
rpcgen -h $xdr_file > $header_file
rpcgen -l $xdr_file > $rpcclnt_file
rpcgen -s tcp $xdr_file > $rpcsvc_file
rpcgen -c $xdr_file > $rpcxdr_file

#
# Run various server files through sed.
#
cat <<ENDOFSEDTEXT>$t
s/^#include[	 ]"db_server.h"/#include "db_config.h"\\
\\
\\#ifndef NO_SYSTEM_INCLUDES\\
\\#include <rpc\\/rpc.h>\\
\\#include <rpc\\/pmap_clnt.h>/
/^#include <netinet.in.h>/a\\
\\#endif\\
\\
\\#include "db_int.h"\\
\\#include "dbinc_auto/db_server.h"\\
\\#include "dbinc/db_server_int.h"\\
\\#include "dbinc_auto/rpc_server_ext.h"
/^	return;/i\\
\\	__dbsrv_timeout(0);
s/svc_sendreply(transp, xdr_void,/svc_sendreply(transp, (xdrproc_t)xdr_void,/
s/svc_getargs(transp, xdr_argument, &argument)/svc_getargs(transp, (xdrproc_t)xdr_argument, (char *)\&argument)/
s/svc_sendreply(transp, xdr_result, result)/svc_sendreply(transp, (xdrproc_t)xdr_result, result)/
s/svc_freeargs(transp, xdr_argument, &argument)/svc_freeargs(transp, (xdrproc_t)xdr_argument, (char *)\&argument)/
s/^main/void __dbsrv_main/
ENDOFSEDTEXT
sed -f $t $rpcsvc_file > ${rpcsvc_file}.new
mv ${rpcsvc_file}.new $rpcsvc_file

sed -f $sed_file $proc_file > ${proc_file}.new
mv ${proc_file}.new $proc_file

# Run rpcgen files through sed to add HAVE_RPC ifdef and appropriate
# includes.
cat <<ENDOFSEDTEXT>$t
1i\\
\\#include "db_config.h"\\
\\
\\#ifdef HAVE_RPC
/^#include "db_server.h"/c\\
\\#ifndef NO_SYSTEM_INCLUDES\\
\\#include <rpc/rpc.h>\\
\\
\\#include <strings.h>\\
\\#endif\\
\\
\\#include "db_int.h"\\
\\#include "dbinc_auto/db_server.h"
\$a\\
\\#endif /* HAVE_RPC */
ENDOFSEDTEXT

sed -f $t $rpcxdr_file > ${rpcxdr_file}.new
mv ${rpcxdr_file}.new $rpcxdr_file
sed -f $t $rpcclnt_file > ${rpcclnt_file}.new
mv ${rpcclnt_file}.new $rpcclnt_file

# Copy the DB_RPC SERVER #defines into a separate file so
# they can be part of db.h.
msgc="/* DO NOT EDIT: automatically built by dist/s_rpc. */"
(echo  "" && echo "$msgc" &&
    sed -n -e "/DB_RPC_SERVER/p" $header_file) > $defs_file

# Fix up the header file:
#	Remove the DB_RPC_SERVER #defines.
#	Remove the <rpc/rpc.h> include, it needs to be included earlier
#	than that.
sed -e "/DB_RPC_SERVER/d"\
    -e "/^#include.*<rpc\/rpc.h>/d" $header_file > ${header_file}.new
mv ${header_file}.new $header_file

chmod 444 $header_file $rpcclnt_file $rpcsvc_file $rpcxdr_file