1 | #!/bin/sh - |
---|
2 | # Id: s_rpc,v 11.18 2002/08/15 15:22:09 bostic Exp |
---|
3 | # |
---|
4 | # Build the automatically generated RPC files |
---|
5 | |
---|
6 | echo "Building RPC client/server files" |
---|
7 | |
---|
8 | . ./RELEASE |
---|
9 | |
---|
10 | t=/tmp/__db_a |
---|
11 | trap 'rm -f $t ; exit 0' 0 |
---|
12 | trap 'rm -f $t ; exit 1' 1 2 3 13 15 |
---|
13 | |
---|
14 | client_file=../rpc_client/gen_client.c |
---|
15 | ctmpl_file=./template/gen_client_ret |
---|
16 | dbinc_file=../dbinc/db.in |
---|
17 | defs_file=../dbinc_auto/rpc_defs.in |
---|
18 | header_file=../dbinc_auto/db_server.h |
---|
19 | proc_file=../rpc_server/c/db_server_proc.c |
---|
20 | rpcclnt_file=../rpc_client/db_server_clnt.c |
---|
21 | rpcsvc_file=../rpc_server/c/db_server_svc.c |
---|
22 | rpcxdr_file=../rpc_server/c/db_server_xdr.c |
---|
23 | sed_file=../rpc_server/c/db_server_proc.sed |
---|
24 | server_file=../rpc_server/c/gen_db_server.c |
---|
25 | stmpl_file=./template/db_server_proc |
---|
26 | xdr_file=../rpc_server/db_server.x |
---|
27 | |
---|
28 | # |
---|
29 | # NOTE: We do NOT want to remove proc_file. It is what we apply $sed_file |
---|
30 | # to, but we do not want to remove it, it does not get built in place. |
---|
31 | rm -f $client_file \ |
---|
32 | $ctmpl_file \ |
---|
33 | $header_file \ |
---|
34 | $rpcclnt_file \ |
---|
35 | $rpcsvc_file \ |
---|
36 | $rpcxdr_file \ |
---|
37 | $sed_file \ |
---|
38 | $server_file \ |
---|
39 | $stmpl_file \ |
---|
40 | $xdr_file |
---|
41 | |
---|
42 | # |
---|
43 | # Generate client/server/XDR code |
---|
44 | # |
---|
45 | xidsize=\ |
---|
46 | `awk '/^#define/ { if ($2 == "DB_XIDDATASIZE") { print $3 }}' $dbinc_file` |
---|
47 | |
---|
48 | awk -f gen_rpc.awk \ |
---|
49 | -v major=$DB_VERSION_MAJOR \ |
---|
50 | -v minor=$DB_VERSION_MINOR \ |
---|
51 | -v xidsize=$xidsize \ |
---|
52 | -v client_file=$client_file \ |
---|
53 | -v ctmpl_file=$ctmpl_file \ |
---|
54 | -v sed_file=$sed_file \ |
---|
55 | -v server_file=$server_file \ |
---|
56 | -v stmpl_file=$stmpl_file \ |
---|
57 | -v xdr_file=$xdr_file < ../rpc_server/rpc.src |
---|
58 | chmod 444 $client_file $server_file |
---|
59 | |
---|
60 | # |
---|
61 | # Now run rpcgen to generate all our sources from the XDR file |
---|
62 | # |
---|
63 | rpcgen -h $xdr_file > $header_file |
---|
64 | rpcgen -l $xdr_file > $rpcclnt_file |
---|
65 | rpcgen -s tcp $xdr_file > $rpcsvc_file |
---|
66 | rpcgen -c $xdr_file > $rpcxdr_file |
---|
67 | |
---|
68 | # |
---|
69 | # Run various server files through sed. |
---|
70 | # |
---|
71 | cat <<ENDOFSEDTEXT>$t |
---|
72 | s/^#include[ ]"db_server.h"/#include "db_config.h"\\ |
---|
73 | \\ |
---|
74 | \\#ifndef NO_SYSTEM_INCLUDES\\ |
---|
75 | \\#include <rpc\\/rpc.h>\\ |
---|
76 | \\#include <rpc\\/pmap_clnt.h>/ |
---|
77 | /^#include <netinet.in.h>/a\\ |
---|
78 | \\#endif\\ |
---|
79 | \\ |
---|
80 | \\#include "db_int.h"\\ |
---|
81 | \\#include "dbinc_auto/db_server.h"\\ |
---|
82 | \\#include "dbinc/db_server_int.h"\\ |
---|
83 | \\#include "dbinc_auto/rpc_server_ext.h" |
---|
84 | /^ return;/i\\ |
---|
85 | \\ __dbsrv_timeout(0); |
---|
86 | s/svc_sendreply(transp, xdr_void,/svc_sendreply(transp, (xdrproc_t)xdr_void,/ |
---|
87 | s/svc_getargs(transp, xdr_argument, &argument)/svc_getargs(transp, (xdrproc_t)xdr_argument, (char *)\&argument)/ |
---|
88 | s/svc_sendreply(transp, xdr_result, result)/svc_sendreply(transp, (xdrproc_t)xdr_result, result)/ |
---|
89 | s/svc_freeargs(transp, xdr_argument, &argument)/svc_freeargs(transp, (xdrproc_t)xdr_argument, (char *)\&argument)/ |
---|
90 | s/^main/void __dbsrv_main/ |
---|
91 | ENDOFSEDTEXT |
---|
92 | sed -f $t $rpcsvc_file > ${rpcsvc_file}.new |
---|
93 | mv ${rpcsvc_file}.new $rpcsvc_file |
---|
94 | |
---|
95 | sed -f $sed_file $proc_file > ${proc_file}.new |
---|
96 | mv ${proc_file}.new $proc_file |
---|
97 | |
---|
98 | # Run rpcgen files through sed to add HAVE_RPC ifdef and appropriate |
---|
99 | # includes. |
---|
100 | cat <<ENDOFSEDTEXT>$t |
---|
101 | 1i\\ |
---|
102 | \\#include "db_config.h"\\ |
---|
103 | \\ |
---|
104 | \\#ifdef HAVE_RPC |
---|
105 | /^#include "db_server.h"/c\\ |
---|
106 | \\#ifndef NO_SYSTEM_INCLUDES\\ |
---|
107 | \\#include <rpc/rpc.h>\\ |
---|
108 | \\ |
---|
109 | \\#include <strings.h>\\ |
---|
110 | \\#endif\\ |
---|
111 | \\ |
---|
112 | \\#include "db_int.h"\\ |
---|
113 | \\#include "dbinc_auto/db_server.h" |
---|
114 | \$a\\ |
---|
115 | \\#endif /* HAVE_RPC */ |
---|
116 | ENDOFSEDTEXT |
---|
117 | |
---|
118 | sed -f $t $rpcxdr_file > ${rpcxdr_file}.new |
---|
119 | mv ${rpcxdr_file}.new $rpcxdr_file |
---|
120 | sed -f $t $rpcclnt_file > ${rpcclnt_file}.new |
---|
121 | mv ${rpcclnt_file}.new $rpcclnt_file |
---|
122 | |
---|
123 | # Copy the DB_RPC SERVER #defines into a separate file so |
---|
124 | # they can be part of db.h. |
---|
125 | msgc="/* DO NOT EDIT: automatically built by dist/s_rpc. */" |
---|
126 | (echo "" && echo "$msgc" && |
---|
127 | sed -n -e "/DB_RPC_SERVER/p" $header_file) > $defs_file |
---|
128 | |
---|
129 | # Fix up the header file: |
---|
130 | # Remove the DB_RPC_SERVER #defines. |
---|
131 | # Remove the <rpc/rpc.h> include, it needs to be included earlier |
---|
132 | # than that. |
---|
133 | sed -e "/DB_RPC_SERVER/d"\ |
---|
134 | -e "/^#include.*<rpc\/rpc.h>/d" $header_file > ${header_file}.new |
---|
135 | mv ${header_file}.new $header_file |
---|
136 | |
---|
137 | chmod 444 $header_file $rpcclnt_file $rpcsvc_file $rpcxdr_file |
---|