From 98fcca256ae09ba7e7c3861b2003b5c62e18a712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Tue, 2 Feb 2021 09:22:33 +0100 Subject: [PATCH] widl: Generate WinRT runtimeclass name constants. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: RĂ©mi Bernon Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- tools/widl/header.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tools/widl/header.c b/tools/widl/header.c index 63389440c94..e6394991317 100644 --- a/tools/widl/header.c +++ b/tools/widl/header.c @@ -1702,6 +1702,7 @@ static void write_runtimeclass(FILE *header, type_t *runtimeclass) { expr_t *contract = get_attrp(runtimeclass->attrs, ATTR_CONTRACT); char *name, *c_name; + size_t i, len; name = format_namespace(runtimeclass->namespace, "", ".", runtimeclass->name, NULL); c_name = format_namespace(runtimeclass->namespace, "", "_", runtimeclass->name, NULL); fprintf(header, "/*\n"); @@ -1710,6 +1711,14 @@ static void write_runtimeclass(FILE *header, type_t *runtimeclass) if (contract) write_apicontract_guard_start(header, contract); fprintf(header, "#ifndef RUNTIMECLASS_%s_DEFINED\n", c_name); fprintf(header, "#define RUNTIMECLASS_%s_DEFINED\n", c_name); + fprintf(header, "#if defined(_MSC_VER) || defined(__MINGW32__)\n"); + /* FIXME: MIDL generates extern const here but GCC warns if extern is initialized */ + fprintf(header, "const DECLSPEC_SELECTANY WCHAR RuntimeClass_%s[] = L\"%s\";\n", c_name, name); + fprintf(header, "#else\n"); + fprintf(header, "static const WCHAR RuntimeClass_%s[] = {", c_name); + for (i = 0, len = strlen(name); i < len; ++i) fprintf(header, "'%c',", name[i]); + fprintf(header, "0};\n"); + fprintf(header, "#endif\n"); fprintf(header, "#endif /* RUNTIMECLASS_%s_DEFINED */\n", c_name); free(c_name); free(name);