-- v2: wine.inf: Install windows.networking.winmd. makedep: Add support for generating winmd files.
From: Hans Leidekker hans@codeweavers.com
Note that this treats winmd files as architecture independent data files even though native stores them in both system32/winmetadata and syswow64/winmetadata. They are 32-bit dlls in both locations and while there are small differences in file sizes their content is not materially different. --- tools/makedep.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+)
diff --git a/tools/makedep.c b/tools/makedep.c index 9e4e147e4d9..54b4200db61 100644 --- a/tools/makedep.c +++ b/tools/makedep.c @@ -102,6 +102,7 @@ struct incl_file #define FLAG_C_UNIX 0x080000 /* file is part of a Unix library */ #define FLAG_SFD_FONTS 0x100000 /* sfd file generated bitmap fonts */ #define FLAG_ARM64EC_X64 0x200000 /* use x86_64 object on ARM64EC */ +#define FLAG_IDL_WINMD 0x400000 /* generates a metadata (.winmd) file */
static const struct { @@ -1014,6 +1015,7 @@ static void parse_pragma_directive( struct file *source, char *str ) else if (!strcmp( flag, "typelib" )) source->flags |= FLAG_IDL_TYPELIB; else if (!strcmp( flag, "register" )) source->flags |= FLAG_IDL_REGISTER; else if (!strcmp( flag, "regtypelib" )) source->flags |= FLAG_IDL_REGTYPELIB; + else if (!strcmp( flag, "winmd" )) source->flags |= FLAG_IDL_WINMD; } else if (strendswith( source->name, ".rc" )) { @@ -2993,6 +2995,33 @@ static void output_source_idl( struct makefile *make, struct incl_file *source, output( "\n" ); } } + + if (source->file->flags & FLAG_IDL_WINMD) + { + struct strarray targets = empty_strarray; + char *name = strmake( "%s.winmd", obj ); + + strarray_add( &targets, name ); + strarray_add( &make->clean_files, name ); + strarray_add( &make->all_targets[0], name ); + + output_filenames_obj_dir( make, targets ); + output( ":" ); + output_filename( widl ); + output_filename( source->filename ); + output_filenames( source->dependencies ); + output( "\n" ); + + output_filenames_obj_dir( make, targets ); + output( ":\n" ); + output( "\t%s%s --winmd -o $@", cmd_prefix( "WIDL" ), widl ); + output_filename( "--nostdinc" ); + output_filenames( defines ); + output_filenames( get_expanded_make_var_array( make, "EXTRAIDLFLAGS" )); + output_filenames( get_expanded_file_local_var( make, obj, "EXTRAIDLFLAGS" )); + output_filename( source->filename ); + output( "\n" ); + } }
From: Hans Leidekker hans@codeweavers.com
--- include/windows.networking.idl | 2 ++ loader/wine.inf.in | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/include/windows.networking.idl b/include/windows.networking.idl index 2dfa25649a3..ee9509ec3cc 100644 --- a/include/windows.networking.idl +++ b/include/windows.networking.idl @@ -17,6 +17,8 @@ */
#ifdef __WIDL__ +#pragma makedep header +#pragma makedep winmd #pragma winrt ns_prefix #endif
diff --git a/loader/wine.inf.in b/loader/wine.inf.in index 892078a4a96..870a4cf5f66 100644 --- a/loader/wine.inf.in +++ b/loader/wine.inf.in @@ -54,7 +54,7 @@ AddService=MountMgr,0x800,MountMgrService RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDlls UpdateInis=SystemIni -CopyFiles=ColorFiles,EtcFiles,InfFiles,NlsFiles,SortFiles +CopyFiles=ColorFiles,EtcFiles,InfFiles,NlsFiles,SortFiles,WinmdFiles AddReg=\ Classes,\ ContentIndex,\ @@ -111,7 +111,7 @@ AddReg=\ [BaseWow64Install] RegisterDlls=RegisterDllsSection WineFakeDlls=FakeDllsWin32,FakeDllsWow64 -CopyFiles=NlsFiles +CopyFiles=NlsFiles,WinmdFiles AddReg=\ CurrentVersion,\ Debugger,\ @@ -1298,6 +1298,10 @@ sortdefault.nls [WineSourceDirs] NlsFiles = nls SortFiles = nls +WinmdFiles = include + +[WinmdFiles] +windows.networking.winmd
[DestinationDirs] ColorFiles = 23 @@ -1305,3 +1309,4 @@ EtcFiles = 12,etc InfFiles = 17 NlsFiles = 11 SortFiles = 10,globalization\sorting +WinmdFiles = 11,winmetadata
v2: Add 'makedep header' in addition to 'makedep winmd' and don't output multiarch dependencies.
FYI, this causes the following warnings to be printed on every build. Is this intentional?:
``` Ingoring supported IIterable<ABI::Windows::Networking::EndpointPair* > parameterized interface. Ingoring supported IIterable<ABI::Windows::Networking::HostName* > parameterized interface. Ingoring supported IIterator<ABI::Windows::Networking::EndpointPair* > parameterized interface. Ingoring supported IIterator<ABI::Windows::Networking::HostName* > parameterized interface. Ingoring supported IVectorView<ABI::Windows::Networking::EndpointPair* > parameterized interface. Ingoring supported IVectorView<ABI::Windows::Networking::HostName* > parameterized interface. Ingoring supported IVector<ABI::Windows::Networking::HostName* > parameterized interface. Ingoring supported IAsyncOperationCompletedHandler<ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Networking::EndpointPair* >* > parameterized interface. Ingoring supported IAsyncOperation<ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Networking::EndpointPair* >* > parameterized interface. Ingoring supported IIterable<ABI::Windows::Networking::EndpointPair* > parameterized interface. Ingoring supported IIterable<ABI::Windows::Networking::HostName* > parameterized interface. Ingoring supported IIterator<ABI::Windows::Networking::EndpointPair* > parameterized interface. Ingoring supported IIterator<ABI::Windows::Networking::HostName* > parameterized interface. Ingoring supported IVectorView<ABI::Windows::Networking::EndpointPair* > parameterized interface. Ingoring supported IVectorView<ABI::Windows::Networking::HostName* > parameterized interface. Ingoring supported IVector<ABI::Windows::Networking::HostName* > parameterized interface. Ingoring supported IAsyncOperationCompletedHandler<ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Networking::EndpointPair* >* > parameterized interface. Ingoring supported IAsyncOperation<ABI::Windows::Foundation::Collections::IVectorView<ABI::Windows::Networking::EndpointPair* >* > parameterized interface. ```
I would have preferred to delay build system support until parameterized are types supported but there's something to be said for it doing now too because the code in widl is not run on Gitlab CI, as Rémi indicated.
Building the files is implemented in b838a0feb5801bb80543457048316e75283f413e so that will at least be tested in CI. Installing the files in the prefix correctly will take more work.