widl: Added support for -ns_prefix option.

This commit is contained in:
Jacek Caban 2015-08-05 12:52:15 +02:00 committed by Alexandre Julliard
parent 3f606a59df
commit 21740b5e15
7 changed files with 36 additions and 5 deletions

View File

@ -17,7 +17,7 @@
*/ */
#ifdef __WIDL__ #ifdef __WIDL__
#pragma winrt #pragma winrt ns_prefix
#endif #endif
import "inspectable.idl"; import "inspectable.idl";

View File

@ -155,8 +155,11 @@ static const char *uuid_string(const UUID *uuid)
static void write_namespace_start(FILE *header, struct namespace *namespace) static void write_namespace_start(FILE *header, struct namespace *namespace)
{ {
if(is_global_namespace(namespace)) if(is_global_namespace(namespace)) {
if(use_abi_namespace)
write_line(header, 1, "namespace ABI {");
return; return;
}
write_namespace_start(header, namespace->parent); write_namespace_start(header, namespace->parent);
write_line(header, 1, "namespace %s {", namespace->name); write_line(header, 1, "namespace %s {", namespace->name);
@ -164,8 +167,11 @@ static void write_namespace_start(FILE *header, struct namespace *namespace)
static void write_namespace_end(FILE *header, struct namespace *namespace) static void write_namespace_end(FILE *header, struct namespace *namespace)
{ {
if(is_global_namespace(namespace)) if(is_global_namespace(namespace)) {
if(use_abi_namespace)
write_line(header, -1, "}", namespace->name);
return; return;
}
write_line(header, -1, "}", namespace->name); write_line(header, -1, "}", namespace->name);
write_namespace_end(header, namespace->parent); write_namespace_end(header, namespace->parent);

View File

@ -152,7 +152,14 @@ UUID *parse_uuid(const char *u)
if(!winrt_mode) if(!winrt_mode)
error_loc("winrt IDL file imported in non-winrt mode\n"); error_loc("winrt IDL file imported in non-winrt mode\n");
}else { }else {
const char *ptr = yytext+5;
winrt_mode = TRUE; winrt_mode = TRUE;
while(isspace(*ptr))
ptr++;
if(!strncmp(ptr, "ns_prefix", 9) && (!*(ptr += 9) || isspace(*ptr)))
use_abi_namespace = TRUE;
} }
yy_pop_state(); yy_pop_state();
} }

View File

@ -80,8 +80,13 @@ static const var_t *find_arg(const var_list_t *args, const char *name)
static char *append_namespace(char *ptr, struct namespace *namespace, const char *separator) static char *append_namespace(char *ptr, struct namespace *namespace, const char *separator)
{ {
if(is_global_namespace(namespace)) if(is_global_namespace(namespace)) {
return ptr; if(!use_abi_namespace)
return ptr;
strcpy(ptr, "ABI");
strcat(ptr, separator);
return ptr + strlen(ptr);
}
ptr = append_namespace(ptr, namespace->parent, separator); ptr = append_namespace(ptr, namespace->parent, separator);
strcpy(ptr, namespace->name); strcpy(ptr, namespace->name);
@ -96,6 +101,9 @@ char *format_namespace(struct namespace *namespace, const char *prefix, const ch
struct namespace *iter; struct namespace *iter;
char *ret, *ptr; char *ret, *ptr;
if(use_abi_namespace && !is_global_namespace(namespace))
len += 3 /* strlen("ABI") */ + sep_len;
for(iter = namespace; !is_global_namespace(iter); iter = iter->parent) for(iter = namespace; !is_global_namespace(iter); iter = iter->parent)
len += strlen(iter->name) + sep_len; len += strlen(iter->name) + sep_len;

View File

@ -73,6 +73,7 @@ static const char usage[] =
" --prefix-server=p Prefix names of server functions with 'p'\n" " --prefix-server=p Prefix names of server functions with 'p'\n"
" -r Generate registration script\n" " -r Generate registration script\n"
" --winrt Enable Windows Runtime mode\n" " --winrt Enable Windows Runtime mode\n"
" --ns_prefix Prefix namespaces with ABI namespace\n"
" -s Generate server stub\n" " -s Generate server stub\n"
" -t Generate typelib\n" " -t Generate typelib\n"
" -u Generate interface identifiers file\n" " -u Generate interface identifiers file\n"
@ -115,6 +116,7 @@ int do_win64 = 1;
int win32_packing = 8; int win32_packing = 8;
int win64_packing = 8; int win64_packing = 8;
int winrt_mode = 0; int winrt_mode = 0;
int use_abi_namespace = 0;
static enum stub_mode stub_mode = MODE_Os; static enum stub_mode stub_mode = MODE_Os;
char *input_name; char *input_name;
@ -155,6 +157,7 @@ enum {
PREFIX_CLIENT_OPTION, PREFIX_CLIENT_OPTION,
PREFIX_SERVER_OPTION, PREFIX_SERVER_OPTION,
PRINT_HELP, PRINT_HELP,
RT_NS_PREFIX,
RT_OPTION, RT_OPTION,
WIN32_OPTION, WIN32_OPTION,
WIN64_OPTION, WIN64_OPTION,
@ -170,6 +173,7 @@ static const struct option long_options[] = {
{ "dlldata-only", 0, NULL, DLLDATA_ONLY_OPTION }, { "dlldata-only", 0, NULL, DLLDATA_ONLY_OPTION },
{ "help", 0, NULL, PRINT_HELP }, { "help", 0, NULL, PRINT_HELP },
{ "local-stubs", 1, NULL, LOCAL_STUBS_OPTION }, { "local-stubs", 1, NULL, LOCAL_STUBS_OPTION },
{ "ns_prefix", 0, NULL, RT_NS_PREFIX },
{ "oldnames", 0, NULL, OLDNAMES_OPTION }, { "oldnames", 0, NULL, OLDNAMES_OPTION },
{ "output", 0, NULL, 'o' }, { "output", 0, NULL, 'o' },
{ "prefix-all", 1, NULL, PREFIX_ALL_OPTION }, { "prefix-all", 1, NULL, PREFIX_ALL_OPTION },
@ -580,6 +584,9 @@ int main(int argc,char *argv[])
case RT_OPTION: case RT_OPTION:
winrt_mode = 1; winrt_mode = 1;
break; break;
case RT_NS_PREFIX:
use_abi_namespace = 1;
break;
case WIN32_OPTION: case WIN32_OPTION:
do_win32 = 1; do_win32 = 1;
do_win64 = 0; do_win64 = 0;

View File

@ -50,6 +50,7 @@ extern int do_win64;
extern int win32_packing; extern int win32_packing;
extern int win64_packing; extern int win64_packing;
extern int winrt_mode; extern int winrt_mode;
extern int use_abi_namespace;
extern char *input_name; extern char *input_name;
extern char *input_idl_name; extern char *input_idl_name;

View File

@ -85,6 +85,8 @@ file).
.PP .PP
.IP "\fB--winrt\fR" .IP "\fB--winrt\fR"
Enable Windows Runtime mode. Enable Windows Runtime mode.
.IP "\fB--ns_prefix\fR"
Prefix namespaces with ABI namespace.
.PP .PP
.B Registration script options: .B Registration script options:
.IP "\fB-r\fR" .IP "\fB-r\fR"