widl: Add --prefix-* options (take 3).
This commit is contained in:
parent
1a47f36cb9
commit
e714c89d2f
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue