widl: Added support for -ns_prefix option.
This commit is contained in:
parent
3f606a59df
commit
21740b5e15
|
@ -17,7 +17,7 @@
|
|||
*/
|
||||
|
||||
#ifdef __WIDL__
|
||||
#pragma winrt
|
||||
#pragma winrt ns_prefix
|
||||
#endif
|
||||
|
||||
import "inspectable.idl";
|
||||
|
|
|
@ -155,8 +155,11 @@ static const char *uuid_string(const UUID *uuid)
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
write_namespace_start(header, namespace->parent);
|
||||
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)
|
||||
{
|
||||
if(is_global_namespace(namespace))
|
||||
if(is_global_namespace(namespace)) {
|
||||
if(use_abi_namespace)
|
||||
write_line(header, -1, "}", namespace->name);
|
||||
return;
|
||||
}
|
||||
|
||||
write_line(header, -1, "}", namespace->name);
|
||||
write_namespace_end(header, namespace->parent);
|
||||
|
|
|
@ -152,7 +152,14 @@ UUID *parse_uuid(const char *u)
|
|||
if(!winrt_mode)
|
||||
error_loc("winrt IDL file imported in non-winrt mode\n");
|
||||
}else {
|
||||
const char *ptr = yytext+5;
|
||||
|
||||
winrt_mode = TRUE;
|
||||
|
||||
while(isspace(*ptr))
|
||||
ptr++;
|
||||
if(!strncmp(ptr, "ns_prefix", 9) && (!*(ptr += 9) || isspace(*ptr)))
|
||||
use_abi_namespace = TRUE;
|
||||
}
|
||||
yy_pop_state();
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
if(is_global_namespace(namespace))
|
||||
return ptr;
|
||||
if(is_global_namespace(namespace)) {
|
||||
if(!use_abi_namespace)
|
||||
return ptr;
|
||||
strcpy(ptr, "ABI");
|
||||
strcat(ptr, separator);
|
||||
return ptr + strlen(ptr);
|
||||
}
|
||||
|
||||
ptr = append_namespace(ptr, namespace->parent, separator);
|
||||
strcpy(ptr, namespace->name);
|
||||
|
@ -96,6 +101,9 @@ char *format_namespace(struct namespace *namespace, const char *prefix, const ch
|
|||
struct namespace *iter;
|
||||
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)
|
||||
len += strlen(iter->name) + sep_len;
|
||||
|
||||
|
|
|
@ -73,6 +73,7 @@ static const char usage[] =
|
|||
" --prefix-server=p Prefix names of server functions with 'p'\n"
|
||||
" -r Generate registration script\n"
|
||||
" --winrt Enable Windows Runtime mode\n"
|
||||
" --ns_prefix Prefix namespaces with ABI namespace\n"
|
||||
" -s Generate server stub\n"
|
||||
" -t Generate typelib\n"
|
||||
" -u Generate interface identifiers file\n"
|
||||
|
@ -115,6 +116,7 @@ int do_win64 = 1;
|
|||
int win32_packing = 8;
|
||||
int win64_packing = 8;
|
||||
int winrt_mode = 0;
|
||||
int use_abi_namespace = 0;
|
||||
static enum stub_mode stub_mode = MODE_Os;
|
||||
|
||||
char *input_name;
|
||||
|
@ -155,6 +157,7 @@ enum {
|
|||
PREFIX_CLIENT_OPTION,
|
||||
PREFIX_SERVER_OPTION,
|
||||
PRINT_HELP,
|
||||
RT_NS_PREFIX,
|
||||
RT_OPTION,
|
||||
WIN32_OPTION,
|
||||
WIN64_OPTION,
|
||||
|
@ -170,6 +173,7 @@ static const struct option long_options[] = {
|
|||
{ "dlldata-only", 0, NULL, DLLDATA_ONLY_OPTION },
|
||||
{ "help", 0, NULL, PRINT_HELP },
|
||||
{ "local-stubs", 1, NULL, LOCAL_STUBS_OPTION },
|
||||
{ "ns_prefix", 0, NULL, RT_NS_PREFIX },
|
||||
{ "oldnames", 0, NULL, OLDNAMES_OPTION },
|
||||
{ "output", 0, NULL, 'o' },
|
||||
{ "prefix-all", 1, NULL, PREFIX_ALL_OPTION },
|
||||
|
@ -580,6 +584,9 @@ int main(int argc,char *argv[])
|
|||
case RT_OPTION:
|
||||
winrt_mode = 1;
|
||||
break;
|
||||
case RT_NS_PREFIX:
|
||||
use_abi_namespace = 1;
|
||||
break;
|
||||
case WIN32_OPTION:
|
||||
do_win32 = 1;
|
||||
do_win64 = 0;
|
||||
|
|
|
@ -50,6 +50,7 @@ extern int do_win64;
|
|||
extern int win32_packing;
|
||||
extern int win64_packing;
|
||||
extern int winrt_mode;
|
||||
extern int use_abi_namespace;
|
||||
|
||||
extern char *input_name;
|
||||
extern char *input_idl_name;
|
||||
|
|
|
@ -85,6 +85,8 @@ file).
|
|||
.PP
|
||||
.IP "\fB--winrt\fR"
|
||||
Enable Windows Runtime mode.
|
||||
.IP "\fB--ns_prefix\fR"
|
||||
Prefix namespaces with ABI namespace.
|
||||
.PP
|
||||
.B Registration script options:
|
||||
.IP "\fB-r\fR"
|
||||
|
|
Loading…
Reference in New Issue