widl: Add --prefix-* options (take 3).

This commit is contained in:
Dan Hipschman 2007-04-25 18:17:31 -07:00 committed by Alexandre Julliard
parent 1a47f36cb9
commit e714c89d2f
6 changed files with 74 additions and 24 deletions

View File

@ -115,7 +115,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset, unsig
write_type(client, def->type, def, def->tname); write_type(client, def->type, def, def->tname);
fprintf(client, " "); fprintf(client, " ");
write_name(client, def); write_prefix_name(client, prefix_client, def);
fprintf(client, "(\n"); fprintf(client, "(\n");
indent++; indent++;
if (func->args) if (func->args)
@ -363,8 +363,8 @@ static void write_clientinterfacedecl(type_t *iface)
print_client("RPC_IF_HANDLE %s_ClientIfHandle = (RPC_IF_HANDLE)& %s___RpcClientInterface;\n", print_client("RPC_IF_HANDLE %s_ClientIfHandle = (RPC_IF_HANDLE)& %s___RpcClientInterface;\n",
iface->name, iface->name); iface->name, iface->name);
else else
print_client("RPC_IF_HANDLE %s_v%d_%d_c_ifspec = (RPC_IF_HANDLE)& %s___RpcClientInterface;\n", print_client("RPC_IF_HANDLE %s%s_v%d_%d_c_ifspec = (RPC_IF_HANDLE)& %s___RpcClientInterface;\n",
iface->name, LOWORD(ver), HIWORD(ver), iface->name); prefix_client, iface->name, LOWORD(ver), HIWORD(ver), iface->name);
fprintf(client, "\n"); fprintf(client, "\n");
} }

View File

@ -125,6 +125,12 @@ void write_name(FILE *h, const var_t *v)
fprintf(h, "%s", v->name); fprintf(h, "%s", v->name);
} }
void write_prefix_name(FILE *h, const char *prefix, const var_t *v)
{
fprintf(h, "%s", prefix);
write_name(h, v);
}
const char* get_name(const var_t *v) const char* get_name(const var_t *v)
{ {
return v->name; return v->name;
@ -709,12 +715,29 @@ static void write_method_proto(const type_t *iface)
} }
} }
static void write_function_proto(const type_t *iface) static void write_function_proto(const type_t *iface, const func_t *fun, const char *prefix)
{
var_t *def = fun->def;
/* FIXME: do we need to handle call_as? */
write_type(header, def->type, def, def->tname);
fprintf(header, " ");
write_prefix_name(header, prefix, def);
fprintf(header, "(\n");
if (fun->args)
write_args(header, fun->args, iface->name, 0, TRUE);
else
fprintf(header, " void");
fprintf(header, ");\n");
}
static void write_function_protos(const type_t *iface)
{ {
const char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); const char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE);
int explicit_handle = is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE); int explicit_handle = is_attr(iface->attrs, ATTR_EXPLICIT_HANDLE);
const var_t* explicit_handle_var; const var_t* explicit_handle_var;
const func_t *cur; const func_t *cur;
int prefixes_differ = strcmp(prefix_client, prefix_server);
if (!iface->funcs) return; if (!iface->funcs) return;
LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry ) LIST_FOR_EACH_ENTRY( cur, iface->funcs, const func_t, entry )
@ -735,16 +758,12 @@ static void write_function_proto(const type_t *iface)
} }
} }
/* FIXME: do we need to handle call_as? */ if (prefixes_differ) {
write_type(header, def->type, def, def->tname); fprintf(header, "/* client prototype */\n");
fprintf(header, " "); write_function_proto(iface, cur, prefix_client);
write_name(header, def); fprintf(header, "/* server prototype */\n");
fprintf(header, "(\n"); }
if (cur->args) write_function_proto(iface, cur, prefix_server);
write_args(header, cur->args, iface->name, 0, TRUE);
else
fprintf(header, " void");
fprintf(header, ");\n");
} }
} }
@ -868,15 +887,17 @@ static void write_rpc_interface(const type_t *iface)
if (var) fprintf(header, "extern handle_t %s;\n", var); if (var) fprintf(header, "extern handle_t %s;\n", var);
if (old_names) if (old_names)
{ {
fprintf(header, "extern RPC_IF_HANDLE %s_ClientIfHandle;\n", iface->name); fprintf(header, "extern RPC_IF_HANDLE %s%s_ClientIfHandle;\n", prefix_client, iface->name);
fprintf(header, "extern RPC_IF_HANDLE %s_ServerIfHandle;\n", iface->name); fprintf(header, "extern RPC_IF_HANDLE %s%s_ServerIfHandle;\n", prefix_server, iface->name);
} }
else else
{ {
fprintf(header, "extern RPC_IF_HANDLE %s_v%d_%d_c_ifspec;\n", iface->name, LOWORD(ver), HIWORD(ver)); fprintf(header, "extern RPC_IF_HANDLE %s%s_v%d_%d_c_ifspec;\n",
fprintf(header, "extern RPC_IF_HANDLE %s_v%d_%d_s_ifspec;\n", iface->name, LOWORD(ver), HIWORD(ver)); prefix_client, iface->name, LOWORD(ver), HIWORD(ver));
fprintf(header, "extern RPC_IF_HANDLE %s%s_v%d_%d_s_ifspec;\n",
prefix_server, iface->name, LOWORD(ver), HIWORD(ver));
} }
write_function_proto(iface); write_function_protos(iface);
} }
fprintf(header,"\n#endif /* __%s_INTERFACE_DEFINED__ */\n\n", iface->name); fprintf(header,"\n#endif /* __%s_INTERFACE_DEFINED__ */\n\n", iface->name);

View File

@ -28,6 +28,7 @@ extern int is_void(const type_t *t, const var_t *v);
extern int is_conformant_array( const array_dims_t *array ); extern int is_conformant_array( const array_dims_t *array );
extern int is_non_void(const expr_list_t *list); extern int is_non_void(const expr_list_t *list);
extern void write_name(FILE *h, const var_t *v); extern void write_name(FILE *h, const var_t *v);
extern void write_prefix_name(FILE *h, const char *prefix, const var_t *v);
extern const char* get_name(const var_t *v); extern const char* get_name(const var_t *v);
extern void write_type(FILE *h, type_t *t, const var_t *v, const char *n); extern void write_type(FILE *h, type_t *t, const var_t *v, const char *n);
extern int is_object(const attr_list_t *list); extern int is_object(const attr_list_t *list);

View File

@ -196,7 +196,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset, unsig
print_server("_RetVal = "); print_server("_RetVal = ");
else else
print_server(""); print_server("");
write_name(server, def); write_prefix_name(server, prefix_server, def);
if (func->args) if (func->args)
{ {
@ -393,8 +393,8 @@ static void write_serverinterfacedecl(type_t *iface)
print_server("RPC_IF_HANDLE %s_ServerIfHandle = (RPC_IF_HANDLE)& %s___RpcServerInterface;\n", print_server("RPC_IF_HANDLE %s_ServerIfHandle = (RPC_IF_HANDLE)& %s___RpcServerInterface;\n",
iface->name, iface->name); iface->name, iface->name);
else else
print_server("RPC_IF_HANDLE %s_v%d_%d_s_ifspec = (RPC_IF_HANDLE)& %s___RpcServerInterface;\n", print_server("RPC_IF_HANDLE %s%s_v%d_%d_s_ifspec = (RPC_IF_HANDLE)& %s___RpcServerInterface;\n",
iface->name, LOWORD(ver), HIWORD(ver), iface->name); prefix_server, iface->name, LOWORD(ver), HIWORD(ver), iface->name);
fprintf(server, "\n"); fprintf(server, "\n");
} }

View File

@ -22,6 +22,7 @@
#include "config.h" #include "config.h"
#include "wine/port.h" #include "wine/port.h"
#include <limits.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#ifdef HAVE_UNISTD_H #ifdef HAVE_UNISTD_H
@ -62,6 +63,9 @@ static char usage[] =
" --oldnames Use old naming conventions\n" " --oldnames Use old naming conventions\n"
" -p Generate proxy\n" " -p Generate proxy\n"
" -P file Name of proxy file (default is infile_p.c)\n" " -P file Name of proxy file (default is infile_p.c)\n"
" --prefix-all=p Prefix names of client stubs / server functions with 'p'\n"
" --prefix-client=p Prefix names of client stubs with 'p'\n"
" --prefix-server=p Prefix names of server functions with 'p'\n"
" -s Generate server stub\n" " -s Generate server stub\n"
" -S file Name of server stub file (default is infile_s.c)\n" " -S file Name of server stub file (default is infile_s.c)\n"
" -t Generate typelib\n" " -t Generate typelib\n"
@ -111,6 +115,8 @@ char *server_token;
char *idfile_name; char *idfile_name;
char *idfile_token; char *idfile_token;
char *temp_name; char *temp_name;
const char *prefix_client = "";
const char *prefix_server = "";
int line_number = 1; int line_number = 1;
@ -120,10 +126,20 @@ FILE *idfile;
time_t now; time_t now;
enum {
OLDNAMES_OPTION = CHAR_MAX + 1,
PREFIX_ALL_OPTION,
PREFIX_CLIENT_OPTION,
PREFIX_SERVER_OPTION
};
static const char *short_options = static const char *short_options =
"cC:d:D:EhH:I:NpP:sS:tT:uU:VW"; "cC:d:D:EhH:I:NpP:sS:tT:uU:VW";
static struct option long_options[] = { static struct option long_options[] = {
{ "oldnames", 0, 0, 1 }, { "oldnames", no_argument, 0, OLDNAMES_OPTION },
{ "prefix-all", required_argument, 0, PREFIX_ALL_OPTION },
{ "prefix-client", required_argument, 0, PREFIX_CLIENT_OPTION },
{ "prefix-server", required_argument, 0, PREFIX_SERVER_OPTION },
{ 0, 0, 0, 0 } { 0, 0, 0, 0 }
}; };
@ -181,9 +197,19 @@ int main(int argc,char *argv[])
while((optc = getopt_long(argc, argv, short_options, long_options, &opti)) != EOF) { while((optc = getopt_long(argc, argv, short_options, long_options, &opti)) != EOF) {
switch(optc) { switch(optc) {
case 1: case OLDNAMES_OPTION:
old_names = 1; old_names = 1;
break; break;
case PREFIX_ALL_OPTION:
prefix_client = xstrdup(optarg);
prefix_server = xstrdup(optarg);
break;
case PREFIX_CLIENT_OPTION:
prefix_client = xstrdup(optarg);
break;
case PREFIX_SERVER_OPTION:
prefix_server = xstrdup(optarg);
break;
case 'c': case 'c':
do_everything = 0; do_everything = 0;
do_client = 1; do_client = 1;

View File

@ -54,6 +54,8 @@ extern char *client_name;
extern char *client_token; extern char *client_token;
extern char *server_name; extern char *server_name;
extern char *server_token; extern char *server_token;
extern const char *prefix_client;
extern const char *prefix_server;
extern time_t now; extern time_t now;
extern int line_number; extern int line_number;