[tor-commits] [Git][tpo/applications/tor-browser-build][maint-14.0] 3 commits: Bug 41291 - Bump and patch mingw-w64-clang

morgan (@morgan) git at gitlab.torproject.org
Thu Oct 31 21:08:48 UTC 2024



morgan pushed to branch maint-14.0 at The Tor Project / Applications / tor-browser-build


Commits:
94f1da7f by june wilde at 2024-10-31T19:18:40+00:00
Bug 41291 - Bump and patch mingw-w64-clang

- - - - -
60286499 by Morgan at 2024-10-31T19:34:02+00:00
Bug 41291: Only enable WebRTC mingw changes for alpha build in the maint-14.0 branch

- Revert this patch once Mullvad Browser 14.0 reaches stable

- - - - -
f9e2c4dd by Morgan at 2024-10-31T20:02:16+00:00
Bug 41263: Prepare Mullvad Browser Alpha 14.0a10

- - - - -


8 changed files:

- projects/browser/Bundle-Data/Docs-MB/ChangeLog.txt
- projects/browser/config
- projects/firefox/config
- projects/mingw-w64-clang/build
- projects/mingw-w64-clang/config
- + projects/mingw-w64-clang/mingw-webrtc.patch
- projects/translation/config
- rbm.conf


Changes:

=====================================
projects/browser/Bundle-Data/Docs-MB/ChangeLog.txt
=====================================
@@ -1,3 +1,40 @@
+Mullvad Browser 14.0a10 - November 01 2024
+ * All Platforms
+   * Updated Firefox to 128.4.0esr
+   * Updated NoScript to 11.5.0
+   * Bug 42356: Review 000-tor-browser.js and 001-base-profile.js for 128 [tor-browser]
+   * Bug 43134: Backport Bugzilla 1436226 Hardcode VP8/VP9 [tor-browser]
+   * Bug 43174: Issue with custom home page on local filesystem [tor-browser]
+   * Bug 43184: Backport Bugzilla 1922294: RFP: fixup square spoofed orientation [tor-browser]
+   * Bug 43209: UI freezes when clipboard is empty after screen lock [tor-browser]
+   * Bug 43217: Fullscreen videos have rounded letterboxing corners [tor-browser]
+   * Bug 43240: Backport security fixes from Firefox 132 [tor-browser]
+ * Windows
+   * Bug 373: Re-enable WebRTC for Windows builds [mullvad-browser]
+ * Linux
+   * Bug 43101: Security features warning links to Firefox installation support page with incomplete info [tor-browser]
+   * Bug 43196: Remove the vendor name from the "is playing media" notification on Linux [tor-browser]
+ * Build System
+   * All Platforms
+     * Bug 41273: relprep.py: bump Firefox and GV to a (yet) non-existing tag when the last one does not match HEAD [tor-browser-build]
+     * Bug 41274: Improve fetch_changelogs.py for major releases [tor-browser-build]
+     * Bug 41279: Add @pierov and @ma1 as new signers [tor-browser-build]
+     * Bug 41289: Fix single-browser in relprep.py [tor-browser-build]
+   * Windows
+     * Bug 41296: Implement missing Windows headers required for building cross-compiling WebRTC with mingw [tor-browser-build]
+   * Linux
+     * Bug 41243: Add own apparmor profile to deb package [tor-browser-build]
+     * Bug 41282: Add SSL to our custom Python for MozBug 1924022 [tor-browser-build]
+
+Mullvad Browser 13.5.9 - October 28 2024
+ * All Platforms
+   * Updated Firefox to 115.17.0esr
+   * Updated NoScript to 11.4.42
+   * Bug 43174: Issue with custom home page on local filesystem [tor-browser]
+   * Bug 43207: Backport Mozbug 1886222 [tor-browser]
+   * Bug 43240: Backport security fixes from Firefox 132 [tor-browser]
+   * Bug 41273: relprep.py: bump Firefox and GV to a (yet) non-existing tag when the last one does not match HEAD [tor-browser-build]
+
 Mullvad Browser 14.0a9 - October 08 2024
  * All Platforms
    * Bug 43197: Disable automatic exception for HTTPS-First [tor-browser]


=====================================
projects/browser/config
=====================================
@@ -108,9 +108,9 @@ input_files:
     enable: '[% ! c("var/android") %]'
   - filename: Bundle-Data
     enable: '[% ! c("var/android") %]'
-  - URL: https://addons.mozilla.org/firefox/downloads/file/4363712/noscript-11.4.42.xpi
+  - URL: https://addons.mozilla.org/firefox/downloads/file/4377088/noscript-11.5.0.xpi
     name: noscript
-    sha256sum: fd2d420afd93829bb6fe30ec6f8ba926d3d54d7583b8bbd822053b8cd13c0472
+    sha256sum: 999244c7be75e58fe16cb2880711013ca079822da1dab65e7eb375c1faf5baad
   - URL: https://addons.mozilla.org/firefox/downloads/file/4359936/ublock_origin-1.60.0.xpi
     name: ublock-origin
     sha256sum: e2cda9b2a1b0a7f6e5ef0da9f87f28df52f8560587ba2e51a3003121cfb81600


=====================================
projects/firefox/config
=====================================
@@ -107,7 +107,6 @@ targets:
       gitlab_project: https://gitlab.torproject.org/tpo/applications/mullvad-browser
       updater_url: 'https://cdn.mullvad.net/browser/update_responses/update_1/'
       nightly_updates_publish_dir_prefix: mullvadbrowser-
-      browser_build: 1
 
   linux-x86_64:
     var:


=====================================
projects/mingw-w64-clang/build
=====================================
@@ -89,6 +89,9 @@ EOF
   patch -p1 < "$rootdir/mingw-dispatchqueue.patch"
   patch -p1 < "$rootdir/mingw-ts_sd.patch"
   patch -p1 < "$rootdir/mingw-composition.patch"
+  [% IF !c("var/release") %]
+    patch -p1 < "$rootdir/mingw-webrtc.patch"
+  [% END %]
 
   cd $builddir/mingw-w64-clang/mingw-w64-headers
   mkdir build && cd build


=====================================
projects/mingw-w64-clang/config
=====================================
@@ -1,7 +1,7 @@
 # vim: filetype=yaml sw=2
 filename: '[% project %]-[% c("version") %]-[% pc("llvm-project", "version") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]'
 git_url: https://git.code.sf.net/p/mingw-w64/mingw-w64
-git_hash: cd4cf9b279f8fb0815f8b9665d3cea60a30290bc
+git_hash: '[% IF c("var/release") %]cd4cf9b279f8fb0815f8b9665d3cea60a30290bc[% ELSE %]4ef04b0a7f7a20735de2f58b5c0496fcb4c7d191[% END -%]'
 version: '[% c("abbrev") %]'
 container:
   use_container: 1
@@ -35,3 +35,5 @@ input_files:
   - filename: mingw-dispatchqueue.patch
   - filename: mingw-ts_sd.patch
   - filename: mingw-composition.patch
+  - filename: mingw-webrtc.patch
+    enable: '[% !c("var/release") %]'
\ No newline at end of file


=====================================
projects/mingw-w64-clang/mingw-webrtc.patch
=====================================
@@ -0,0 +1,1727 @@
+diff --git a/mingw-w64-headers/include/weakreference.h b/mingw-w64-headers/include/weakreference.h
+new file mode 100644
+index 000000000..9776dd194
+--- /dev/null
++++ b/mingw-w64-headers/include/weakreference.h
+@@ -0,0 +1,218 @@
++/*** Autogenerated by WIDL 8.0 from include/weakreference.idl - Do not edit ***/
++
++#ifdef _WIN32
++#ifndef __REQUIRED_RPCNDR_H_VERSION__
++#define __REQUIRED_RPCNDR_H_VERSION__ 475
++#endif
++#include <rpc.h>
++#include <rpcndr.h>
++#endif
++
++#ifndef COM_NO_WINDOWS_H
++#include <windows.h>
++#include <ole2.h>
++#endif
++
++#ifndef __weakreference_h__
++#define __weakreference_h__
++
++#ifndef __WIDL_INLINE
++#if defined(__cplusplus) || defined(_MSC_VER)
++#define __WIDL_INLINE inline
++#elif defined(__GNUC__)
++#define __WIDL_INLINE __inline__
++#endif
++#endif
++
++/* Forward declarations */
++
++#ifndef __IWeakReference_FWD_DEFINED__
++#define __IWeakReference_FWD_DEFINED__
++typedef interface IWeakReference IWeakReference;
++#ifdef __cplusplus
++interface IWeakReference;
++#endif /* __cplusplus */
++#endif
++
++#ifndef __IWeakReferenceSource_FWD_DEFINED__
++#define __IWeakReferenceSource_FWD_DEFINED__
++typedef interface IWeakReferenceSource IWeakReferenceSource;
++#ifdef __cplusplus
++interface IWeakReferenceSource;
++#endif /* __cplusplus */
++#endif
++
++/* Headers for imported files */
++
++#include <inspectable.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/*****************************************************************************
++ * IWeakReference interface
++ */
++#ifndef __IWeakReference_INTERFACE_DEFINED__
++#define __IWeakReference_INTERFACE_DEFINED__
++
++DEFINE_GUID(IID_IWeakReference, 0x00000037, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
++#if defined(__cplusplus) && !defined(CINTERFACE)
++MIDL_INTERFACE("00000037-0000-0000-c000-000000000046")
++IWeakReference : public IUnknown
++{
++    virtual HRESULT STDMETHODCALLTYPE Resolve(
++        REFIID riid,
++        IInspectable **objectReference) = 0;
++
++};
++#ifdef __CRT_UUID_DECL
++__CRT_UUID_DECL(IWeakReference, 0x00000037, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46)
++#endif
++#else
++typedef struct IWeakReferenceVtbl {
++    BEGIN_INTERFACE
++
++    /*** IUnknown methods ***/
++    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
++        IWeakReference *This,
++        REFIID riid,
++        void **ppvObject);
++
++    ULONG (STDMETHODCALLTYPE *AddRef)(
++        IWeakReference *This);
++
++    ULONG (STDMETHODCALLTYPE *Release)(
++        IWeakReference *This);
++
++    /*** IWeakReference methods ***/
++    HRESULT (STDMETHODCALLTYPE *Resolve)(
++        IWeakReference *This,
++        REFIID riid,
++        IInspectable **objectReference);
++
++    END_INTERFACE
++} IWeakReferenceVtbl;
++
++interface IWeakReference {
++    CONST_VTBL IWeakReferenceVtbl* lpVtbl;
++};
++
++#ifdef COBJMACROS
++#ifndef WIDL_C_INLINE_WRAPPERS
++/*** IUnknown methods ***/
++#define IWeakReference_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
++#define IWeakReference_AddRef(This) (This)->lpVtbl->AddRef(This)
++#define IWeakReference_Release(This) (This)->lpVtbl->Release(This)
++/*** IWeakReference methods ***/
++#define IWeakReference_Resolve(This,riid,objectReference) (This)->lpVtbl->Resolve(This,riid,objectReference)
++#else
++/*** IUnknown methods ***/
++static __WIDL_INLINE HRESULT IWeakReference_QueryInterface(IWeakReference* This,REFIID riid,void **ppvObject) {
++    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
++}
++static __WIDL_INLINE ULONG IWeakReference_AddRef(IWeakReference* This) {
++    return This->lpVtbl->AddRef(This);
++}
++static __WIDL_INLINE ULONG IWeakReference_Release(IWeakReference* This) {
++    return This->lpVtbl->Release(This);
++}
++/*** IWeakReference methods ***/
++static __WIDL_INLINE HRESULT IWeakReference_Resolve(IWeakReference* This,REFIID riid,IInspectable **objectReference) {
++    return This->lpVtbl->Resolve(This,riid,objectReference);
++}
++#endif
++#endif
++
++#endif
++
++
++#endif  /* __IWeakReference_INTERFACE_DEFINED__ */
++
++/*****************************************************************************
++ * IWeakReferenceSource interface
++ */
++#ifndef __IWeakReferenceSource_INTERFACE_DEFINED__
++#define __IWeakReferenceSource_INTERFACE_DEFINED__
++
++DEFINE_GUID(IID_IWeakReferenceSource, 0x00000038, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
++#if defined(__cplusplus) && !defined(CINTERFACE)
++MIDL_INTERFACE("00000038-0000-0000-c000-000000000046")
++IWeakReferenceSource : public IUnknown
++{
++    virtual HRESULT STDMETHODCALLTYPE GetWeakReference(
++        IWeakReference **weakReference) = 0;
++
++};
++#ifdef __CRT_UUID_DECL
++__CRT_UUID_DECL(IWeakReferenceSource, 0x00000038, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46)
++#endif
++#else
++typedef struct IWeakReferenceSourceVtbl {
++    BEGIN_INTERFACE
++
++    /*** IUnknown methods ***/
++    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
++        IWeakReferenceSource *This,
++        REFIID riid,
++        void **ppvObject);
++
++    ULONG (STDMETHODCALLTYPE *AddRef)(
++        IWeakReferenceSource *This);
++
++    ULONG (STDMETHODCALLTYPE *Release)(
++        IWeakReferenceSource *This);
++
++    /*** IWeakReferenceSource methods ***/
++    HRESULT (STDMETHODCALLTYPE *GetWeakReference)(
++        IWeakReferenceSource *This,
++        IWeakReference **weakReference);
++
++    END_INTERFACE
++} IWeakReferenceSourceVtbl;
++
++interface IWeakReferenceSource {
++    CONST_VTBL IWeakReferenceSourceVtbl* lpVtbl;
++};
++
++#ifdef COBJMACROS
++#ifndef WIDL_C_INLINE_WRAPPERS
++/*** IUnknown methods ***/
++#define IWeakReferenceSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
++#define IWeakReferenceSource_AddRef(This) (This)->lpVtbl->AddRef(This)
++#define IWeakReferenceSource_Release(This) (This)->lpVtbl->Release(This)
++/*** IWeakReferenceSource methods ***/
++#define IWeakReferenceSource_GetWeakReference(This,weakReference) (This)->lpVtbl->GetWeakReference(This,weakReference)
++#else
++/*** IUnknown methods ***/
++static __WIDL_INLINE HRESULT IWeakReferenceSource_QueryInterface(IWeakReferenceSource* This,REFIID riid,void **ppvObject) {
++    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
++}
++static __WIDL_INLINE ULONG IWeakReferenceSource_AddRef(IWeakReferenceSource* This) {
++    return This->lpVtbl->AddRef(This);
++}
++static __WIDL_INLINE ULONG IWeakReferenceSource_Release(IWeakReferenceSource* This) {
++    return This->lpVtbl->Release(This);
++}
++/*** IWeakReferenceSource methods ***/
++static __WIDL_INLINE HRESULT IWeakReferenceSource_GetWeakReference(IWeakReferenceSource* This,IWeakReference **weakReference) {
++    return This->lpVtbl->GetWeakReference(This,weakReference);
++}
++#endif
++#endif
++
++#endif
++
++
++#endif  /* __IWeakReferenceSource_INTERFACE_DEFINED__ */
++
++/* Begin additional prototypes for all interfaces */
++
++
++/* End additional prototypes */
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* __weakreference_h__ */
+diff --git a/mingw-w64-headers/include/weakreference.idl b/mingw-w64-headers/include/weakreference.idl
+new file mode 100644
+index 000000000..037fce859
+--- /dev/null
++++ b/mingw-w64-headers/include/weakreference.idl
+@@ -0,0 +1,28 @@
++import "inspectable.idl";
++
++[object, uuid(00000037-0000-0000-C000-000000000046), pointer_default (unique)]
++interface IWeakReference: IUnknown
++{
++// cpp_quote("#if (_MSC_VER >= 1600) && defined(__cplusplus) && !defined(CINTERFACE)")
++// cpp_quote("    EXTERN_C const IID IID_IWeakReference;")
++// cpp_quote("    extern \"C++\"")
++// cpp_quote("    {")
++// cpp_quote("        MIDL_INTERFACE(\"00000037-0000-0000-C000-000000000046\")")
++// cpp_quote("        IWeakReference : public IUnknown {")
++// cpp_quote("        public:")
++// cpp_quote("            virtual HRESULT STDMETHODCALLTYPE Resolve(REFIID riid, IInspectable **objectReference) = 0;")
++// cpp_quote("")
++// cpp_quote("            template <typename T>")
++// cpp_quote("            HRESULT Resolve(T** objectReference) {")
++// cpp_quote("                return 0;")
++// cpp_quote("            }")
++// cpp_quote("        };")
++// cpp_quote("    } // extern C++")
++// cpp_quote("#else")
++   HRESULT Resolve([in] REFIID riid, [out, retval, iid_is(riid)] IInspectable **objectReference);
++}
++
++[object, uuid(00000038-0000-0000-C000-000000000046), pointer_default (unique)]
++interface IWeakReferenceSource : IUnknown {
++    HRESULT GetWeakReference([out, retval] IWeakReference **weakReference);
++}
+diff --git a/mingw-w64-headers/include/windows.graphics.capture.h b/mingw-w64-headers/include/windows.graphics.capture.h
+index 203b0f034..4a0c0b546 100644
+--- a/mingw-w64-headers/include/windows.graphics.capture.h
++++ b/mingw-w64-headers/include/windows.graphics.capture.h
+@@ -902,7 +902,7 @@ namespace ABI {
+                 {
+                     virtual HRESULT STDMETHODCALLTYPE Recreate(
+                         ABI::Windows::Graphics::DirectX::Direct3D11::IDirect3DDevice *device,
+-                        enum DirectXPixelFormat pixel_format,
++                        enum DirectX::DirectXPixelFormat pixel_format,
+                         INT32 number_of_buffers,
+                         struct SizeInt32 size) = 0;
+ 
+@@ -1100,7 +1100,7 @@ namespace ABI {
+                 {
+                     virtual HRESULT STDMETHODCALLTYPE Create(
+                         ABI::Windows::Graphics::DirectX::Direct3D11::IDirect3DDevice *device,
+-                        enum DirectXPixelFormat pixel_format,
++                        enum DirectX::DirectXPixelFormat pixel_format,
+                         INT32 number_of_buffers,
+                         struct SizeInt32 size,
+                         ABI::Windows::Graphics::Capture::IDirect3D11CaptureFramePool **result) = 0;
+@@ -1236,7 +1236,7 @@ namespace ABI {
+                 {
+                     virtual HRESULT STDMETHODCALLTYPE CreateFreeThreaded(
+                         ABI::Windows::Graphics::DirectX::Direct3D11::IDirect3DDevice *device,
+-                        enum DirectXPixelFormat pixel_format,
++                        enum DirectX::DirectXPixelFormat pixel_format,
+                         INT32 number_of_buffers,
+                         struct SizeInt32 size,
+                         ABI::Windows::Graphics::Capture::IDirect3D11CaptureFramePool **result) = 0;
+diff --git a/mingw-w64-headers/include/windows.graphics.directx.direct3d11.interop.h b/mingw-w64-headers/include/windows.graphics.directx.direct3d11.interop.h
+new file mode 100644
+index 000000000..7b66f7d16
+--- /dev/null
++++ b/mingw-w64-headers/include/windows.graphics.directx.direct3d11.interop.h
+@@ -0,0 +1,164 @@
++/*** Autogenerated by WIDL 8.0 from include/windows.graphics.directx.direct3d11.interop.idl - Do not edit ***/
++
++#ifdef _WIN32
++#ifndef __REQUIRED_RPCNDR_H_VERSION__
++#define __REQUIRED_RPCNDR_H_VERSION__ 475
++#endif
++#include <rpc.h>
++#include <rpcndr.h>
++#endif
++
++#ifndef COM_NO_WINDOWS_H
++#include <windows.h>
++#include <ole2.h>
++#endif
++
++#ifndef __windows_graphics_directx_direct3d11_interop_h__
++#define __windows_graphics_directx_direct3d11_interop_h__
++
++#ifndef __WIDL_INLINE
++#if defined(__cplusplus) || defined(_MSC_VER)
++#define __WIDL_INLINE inline
++#elif defined(__GNUC__)
++#define __WIDL_INLINE __inline__
++#endif
++#endif
++
++/* Forward declarations */
++
++#ifndef ____x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_FWD_DEFINED__
++#define ____x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_FWD_DEFINED__
++typedef interface __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess;
++#ifdef __cplusplus
++#define __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess ABI::Windows::Graphics::DirectX::Direct3D11::IDirect3DDxgiInterfaceAccess
++namespace ABI {
++    namespace Windows {
++        namespace Graphics {
++            namespace DirectX {
++                namespace Direct3D11 {
++                    interface IDirect3DDxgiInterfaceAccess;
++                }
++            }
++        }
++    }
++}
++#endif /* __cplusplus */
++#endif
++
++/* Headers for imported files */
++
++#include <windows.graphics.directx.direct3d11.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/*****************************************************************************
++ * IDirect3DDxgiInterfaceAccess interface
++ */
++#ifndef ____x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_INTERFACE_DEFINED__
++#define ____x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_INTERFACE_DEFINED__
++
++DEFINE_GUID(IID___x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess, 0xa9b3d012, 0x3df2, 0x4ee3, 0xb8,0xd1, 0x86,0x95,0xf4,0x57,0xd3,0xc1);
++#if defined(__cplusplus) && !defined(CINTERFACE)
++} /* extern "C" */
++namespace ABI {
++    namespace Windows {
++        namespace Graphics {
++            namespace DirectX {
++                namespace Direct3D11 {
++                    MIDL_INTERFACE("a9b3d012-3df2-4ee3-b8d1-8695f457d3c1")
++                    IDirect3DDxgiInterfaceAccess : public IUnknown
++                    {
++                        virtual HRESULT STDMETHODCALLTYPE GetInterface(
++                            REFIID iid,
++                            void **object) = 0;
++
++                    };
++                }
++            }
++        }
++    }
++}
++extern "C" {
++#ifdef __CRT_UUID_DECL
++__CRT_UUID_DECL(__x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess, 0xa9b3d012, 0x3df2, 0x4ee3, 0xb8,0xd1, 0x86,0x95,0xf4,0x57,0xd3,0xc1)
++#endif
++#else
++typedef struct __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccessVtbl {
++    BEGIN_INTERFACE
++
++    /*** IUnknown methods ***/
++    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
++        __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess *This,
++        REFIID riid,
++        void **ppvObject);
++
++    ULONG (STDMETHODCALLTYPE *AddRef)(
++        __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess *This);
++
++    ULONG (STDMETHODCALLTYPE *Release)(
++        __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess *This);
++
++    /*** IDirect3DDxgiInterfaceAccess methods ***/
++    HRESULT (STDMETHODCALLTYPE *GetInterface)(
++        __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess *This,
++        REFIID iid,
++        void **object);
++
++    END_INTERFACE
++} __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccessVtbl;
++
++interface __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess {
++    CONST_VTBL __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccessVtbl* lpVtbl;
++};
++
++#ifdef COBJMACROS
++#ifndef WIDL_C_INLINE_WRAPPERS
++/*** IUnknown methods ***/
++#define __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
++#define __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_AddRef(This) (This)->lpVtbl->AddRef(This)
++#define __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_Release(This) (This)->lpVtbl->Release(This)
++/*** IDirect3DDxgiInterfaceAccess methods ***/
++#define __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_GetInterface(This,iid,object) (This)->lpVtbl->GetInterface(This,iid,object)
++#else
++/*** IUnknown methods ***/
++static __WIDL_INLINE HRESULT __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_QueryInterface(__x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess* This,REFIID riid,void **ppvObject) {
++    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
++}
++static __WIDL_INLINE ULONG __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_AddRef(__x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess* This) {
++    return This->lpVtbl->AddRef(This);
++}
++static __WIDL_INLINE ULONG __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_Release(__x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess* This) {
++    return This->lpVtbl->Release(This);
++}
++/*** IDirect3DDxgiInterfaceAccess methods ***/
++static __WIDL_INLINE HRESULT __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_GetInterface(__x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess* This,REFIID iid,void **object) {
++    return This->lpVtbl->GetInterface(This,iid,object);
++}
++#endif
++#ifdef WIDL_using_Windows_Graphics_DirectX_Direct3D11
++#define IID_IDirect3DDxgiInterfaceAccess IID___x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess
++#define IDirect3DDxgiInterfaceAccessVtbl __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccessVtbl
++#define IDirect3DDxgiInterfaceAccess __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess
++#define IDirect3DDxgiInterfaceAccess_QueryInterface __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_QueryInterface
++#define IDirect3DDxgiInterfaceAccess_AddRef __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_AddRef
++#define IDirect3DDxgiInterfaceAccess_Release __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_Release
++#define IDirect3DDxgiInterfaceAccess_GetInterface __x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_GetInterface
++#endif /* WIDL_using_Windows_Graphics_DirectX_Direct3D11 */
++#endif
++
++#endif
++
++#endif  /* ____x_ABI_CWindows_CGraphics_CDirectX_CDirect3D11_CIDirect3DDxgiInterfaceAccess_INTERFACE_DEFINED__ */
++
++/* Begin additional prototypes for all interfaces */
++
++
++/* End additional prototypes */
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* __windows_graphics_directx_direct3d11_interop_h__ */
+diff --git a/mingw-w64-headers/include/windows.graphics.directx.direct3d11.interop.idl b/mingw-w64-headers/include/windows.graphics.directx.direct3d11.interop.idl
+new file mode 100644
+index 000000000..51e2845ea
+--- /dev/null
++++ b/mingw-w64-headers/include/windows.graphics.directx.direct3d11.interop.idl
+@@ -0,0 +1,14 @@
++#ifdef __WIDL__
++#pragma winrt ns_prefix
++#endif
++
++import "windows.graphics.directx.direct3d11.idl";
++
++namespace Windows.Graphics.DirectX.Direct3D11 {
++    [
++        uuid(A9B3D012-3DF2-4EE3-B8D1-8695F457D3C1)
++    ]
++    interface IDirect3DDxgiInterfaceAccess : IUnknown {
++        HRESULT GetInterface([in] REFIID iid, [out, iid_is(iid)] void **object);
++    };
++}
+diff --git a/mingw-w64-headers/include/windows.ui.core.h b/mingw-w64-headers/include/windows.ui.core.h
+index 5eb820b33..8a2e93ce4 100644
+--- a/mingw-w64-headers/include/windows.ui.core.h
++++ b/mingw-w64-headers/include/windows.ui.core.h
+@@ -1602,7 +1602,7 @@ namespace ABI {
+             namespace Core {
+                 struct CoreProximityEvaluation {
+                     INT32 Score;
+-                    struct Point AdjustedPoint;
++                    struct Foundation::Point AdjustedPoint;
+                 };
+             }
+         }
+@@ -2759,11 +2759,11 @@ namespace ABI {
+                         ) = 0;
+ 
+                     virtual HRESULT STDMETHODCALLTYPE GetAsyncKeyState(
+-                        enum VirtualKey key,
++                        enum System::VirtualKey key,
+                         enum CoreVirtualKeyStates *state) = 0;
+ 
+                     virtual HRESULT STDMETHODCALLTYPE GetKeyState(
+-                        enum VirtualKey key,
++                        enum System::VirtualKey key,
+                         enum CoreVirtualKeyStates *state) = 0;
+ 
+                     virtual HRESULT STDMETHODCALLTYPE ReleasePointerCapture(
+@@ -3491,7 +3491,7 @@ namespace ABI {
+                 ICoreWindow2 : public IInspectable
+                 {
+                     virtual HRESULT STDMETHODCALLTYPE put_PointerPosition(
+-                        struct Point value) = 0;
++                        struct Foundation::Point value) = 0;
+ 
+                 };
+             }
+@@ -4605,7 +4605,7 @@ namespace ABI {
+                 IKeyEventArgs : public IInspectable
+                 {
+                     virtual HRESULT STDMETHODCALLTYPE get_VirtualKey(
+-                        enum VirtualKey *value) = 0;
++                        enum System::VirtualKey *value) = 0;
+ 
+                     virtual HRESULT STDMETHODCALLTYPE get_KeyStatus(
+                         struct CorePhysicalKeyStatus *value) = 0;
+@@ -4876,7 +4876,7 @@ namespace ABI {
+                         ABI::Windows::UI::Input::IPointerPoint **value) = 0;
+ 
+                     virtual HRESULT STDMETHODCALLTYPE get_KeyModifiers(
+-                        enum VirtualKeyModifiers *value) = 0;
++                        enum System::VirtualKeyModifiers *value) = 0;
+ 
+                     virtual HRESULT STDMETHODCALLTYPE GetIntermediatePoints(
+                         ABI::Windows::Foundation::Collections::IVector<ABI::Windows::UI::Input::PointerPoint* > **value) = 0;
+diff --git a/mingw-w64-headers/include/wrl/client.h b/mingw-w64-headers/include/wrl/client.h
+index aeb886ea8..4fcadc7fc 100644
+--- a/mingw-w64-headers/include/wrl/client.h
++++ b/mingw-w64-headers/include/wrl/client.h
+@@ -9,12 +9,15 @@
+ 
+ #include <stddef.h>
+ #include <unknwn.h>
+-/* #include <weakreference.h> */
++#include <weakreference.h>
+ #include <roapi.h>
+ 
+ /* #include <wrl/def.h> */
+ #include <wrl/internal.h>
+ 
++#define WrlFinal final
++#define WrlSealed sealed
++
+ namespace Microsoft {
+     namespace WRL {
+         namespace Details {
+diff --git a/mingw-w64-headers/include/wrl/event.h b/mingw-w64-headers/include/wrl/event.h
+new file mode 100644
+index 000000000..2e883e241
+--- /dev/null
++++ b/mingw-w64-headers/include/wrl/event.h
+@@ -0,0 +1,368 @@
++#ifndef _WRL_EVENT_H_
++#define _WRL_EVENT_H_
++
++// #include <wrl/def.h>
++#include <wrl/internal.h>
++#include <wrl/client.h>
++#include <wrl/implements.h>
++#include <wrl/wrappers/corewrappers.h>
++#include <eventtoken.h>
++// #include <roerrorapi.h>
++
++#include <pshpack8.h>
++
++namespace Microsoft {
++    namespace WRL {
++        enum DelegateCheckMode {
++            NoCheck = 1
++        };
++
++        template<DelegateCheckMode delegateCheckMode> struct DelegateTraits;
++
++        template<> struct DelegateTraits<NoCheck> {
++            static HRESULT CheckReturn(HRESULT hr) {
++                return 0;
++            }
++        };
++
++        extern __declspec(selectany) const DelegateCheckMode DefaultDelegateCheckMode = NoCheck;
++
++        enum InvokeMode {
++            StopOnFirstError = 1,
++            FireAll = 2,
++        };
++
++        template<InvokeMode invokeModeValue> struct InvokeModeOptions {
++            static const InvokeMode invokeMode = invokeModeValue;
++        };
++
++        template<InvokeMode invokeMode> struct InvokeTraits;
++
++        template<typename TDelegateInterface, typename EventSourceOptions>
++        class EventSource;
++
++        namespace Details {
++            template<typename TDelegateInterface>
++            void* GetDelegateBucketAssist(TDelegateInterface *pDelegate) {
++                return nullptr;
++            }
++
++            template<typename TMemberFunction> struct ArgTraits {
++                static const int args = -1;
++            };
++
++            template<typename TDelegateInterface>
++            struct ArgTraits<HRESULT(STDMETHODCALLTYPE TDelegateInterface::*)(void)> {
++                static const int args = 0;
++            };
++
++            template<typename TDelegateInterface, typename TArg1>
++            struct ArgTraits<HRESULT(STDMETHODCALLTYPE TDelegateInterface::*)(TArg1)> {
++                static const int args = 1;
++                typedef TArg1 Arg1Type;
++            };
++
++            template<typename TDelegateInterface, typename TArg1, typename TArg2>
++            struct ArgTraits<HRESULT(STDMETHODCALLTYPE TDelegateInterface::*)(TArg1, TArg2)>
++            {
++                static const int args = 2;
++                typedef TArg1 Arg1Type;
++                typedef TArg2 Arg2Type;
++            };
++
++            template<typename TDelegateInterface, typename TArg1, typename TArg2, typename TArg3>
++            struct ArgTraits<HRESULT(STDMETHODCALLTYPE TDelegateInterface::*)(TArg1, TArg2, TArg3)>
++            {
++                static const int args = 3;
++                typedef TArg1 Arg1Type;
++                typedef TArg2 Arg2Type;
++                typedef TArg3 Arg3Type;
++            };
++
++            template<typename TDelegateInterface, typename TArg1, typename TArg2, typename TArg3, typename TArg4>
++            struct ArgTraits<HRESULT(STDMETHODCALLTYPE TDelegateInterface::*)(TArg1, TArg2, TArg3, TArg4)>
++            {
++                static const int args = 4;
++                typedef TArg1 Arg1Type;
++                typedef TArg2 Arg2Type;
++                typedef TArg3 Arg3Type;
++                typedef TArg4 Arg4Type;
++            };
++
++            template<typename TDelegateInterface, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5>
++            struct ArgTraits<HRESULT(STDMETHODCALLTYPE TDelegateInterface::*)(TArg1, TArg2, TArg3, TArg4, TArg5)>
++            {
++                static const int args = 5;
++                typedef TArg1 Arg1Type;
++                typedef TArg2 Arg2Type;
++                typedef TArg3 Arg3Type;
++                typedef TArg4 Arg4Type;
++                typedef TArg5 Arg5Type;
++            };
++
++            template<typename TDelegateInterface, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6>
++            struct ArgTraits<HRESULT(STDMETHODCALLTYPE TDelegateInterface::*)(TArg1, TArg2, TArg3, TArg4, TArg5, TArg6)>
++            {
++                static const int args = 6;
++                typedef TArg1 Arg1Type;
++                typedef TArg2 Arg2Type;
++                typedef TArg3 Arg3Type;
++                typedef TArg4 Arg4Type;
++                typedef TArg5 Arg5Type;
++                typedef TArg6 Arg6Type;
++            };
++
++            template<typename TDelegateInterface, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7>
++            struct ArgTraits<HRESULT(STDMETHODCALLTYPE TDelegateInterface::*)(TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7)>
++            {
++                static const int args = 7;
++                typedef TArg1 Arg1Type;
++                typedef TArg2 Arg2Type;
++                typedef TArg3 Arg3Type;
++                typedef TArg4 Arg4Type;
++                typedef TArg5 Arg5Type;
++                typedef TArg6 Arg6Type;
++                typedef TArg7 Arg7Type;
++            };
++
++            template<typename TDelegateInterface, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8>
++            struct ArgTraits<HRESULT(STDMETHODCALLTYPE TDelegateInterface::*)(TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8)>
++            {
++                static const int args = 8;
++                typedef TArg1 Arg1Type;
++                typedef TArg2 Arg2Type;
++                typedef TArg3 Arg3Type;
++                typedef TArg4 Arg4Type;
++                typedef TArg5 Arg5Type;
++                typedef TArg6 Arg6Type;
++                typedef TArg7 Arg7Type;
++                typedef TArg8 Arg8Type;
++            };
++
++            template<typename TDelegateInterface, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5, typename TArg6, typename TArg7, typename TArg8, typename TArg9>
++            struct ArgTraits<HRESULT(STDMETHODCALLTYPE TDelegateInterface::*)(TArg1, TArg2, TArg3, TArg4, TArg5, TArg6, TArg7, TArg8, TArg9)>
++            {
++                static const int args = 9;
++                typedef TArg1 Arg1Type;
++                typedef TArg2 Arg2Type;
++                typedef TArg3 Arg3Type;
++                typedef TArg4 Arg4Type;
++                typedef TArg5 Arg5Type;
++                typedef TArg6 Arg6Type;
++                typedef TArg7 Arg7Type;
++                typedef TArg8 Arg8Type;
++                typedef TArg9 Arg9Type;
++            };
++
++            template<typename TDelegateInterface, bool isImplements = __is_base_of(ImplementsBase, TDelegateInterface)>
++            struct ArgTraitsHelper;
++
++            template<typename TDelegateInterface>
++            struct ArgTraitsHelper<TDelegateInterface, false>
++            {
++                typedef decltype(&TDelegateInterface::Invoke) methodType;
++                typedef ArgTraits<methodType> Traits;
++                static const int args = Traits::args;
++                typedef TDelegateInterface Interface;
++            };
++
++            template<typename TDelegateInterface>
++            struct ArgTraitsHelper<TDelegateInterface, true> {};
++
++            template<typename TDelegateInterface> class DelegateArgTraits {};
++
++            template<typename TDelegateInterface, typename ...TArgs>
++            class DelegateArgTraits<HRESULT (STDMETHODCALLTYPE TDelegateInterface::*)(TArgs...)>
++            {
++                template<typename TCallback, DelegateCheckMode checkMode>
++                struct DelegateInvokeHelper WrlSealed : public ::Microsoft::WRL::RuntimeClass<RuntimeClassFlags<Delegate>, TDelegateInterface>, RemoveReference<TCallback>::Type {
++                    DelegateInvokeHelper(TCallback&& callback) noexcept {}
++
++                    HRESULT STDMETHODCALLTYPE Invoke(TArgs... args) noexcept override {
++                        return 0;
++                    }
++                };
++
++            public:
++                template<typename TImplements, DelegateCheckMode checkMode = DefaultDelegateCheckMode, typename TLambda>
++                static ComPtr<TImplements> Callback(TLambda&& callback) noexcept {
++                    ComPtr<TImplements> empty;
++                    return empty;
++                }
++            };
++
++            template<typename TDelegateInterface, bool isImplements = __is_base_of(ImplementsBase, TDelegateInterface)>
++            struct DelegateArgTraitsHelper;
++
++            template<typename TDelegateInterface>
++            struct DelegateArgTraitsHelper<TDelegateInterface, false> {
++                typedef TDelegateInterface Interface;
++                typedef DelegateArgTraits<decltype(&TDelegateInterface::Invoke)> Traits;
++            };
++
++            template<typename TDelegateInterface>
++            struct DelegateArgTraitsHelper<TDelegateInterface, true> {};
++
++            template<typename TDelegateInterface>
++            HRESULT CreateAgileHelper(TDelegateInterface* delegateInterface, TDelegateInterface** wrapper) {
++                return 0;
++            }
++        }
++
++        template<typename TDelegateInterface, typename TLambda>
++        ComPtr<typename Details::DelegateArgTraitsHelper<TDelegateInterface>::Interface> Callback(TLambda&& callback) noexcept {
++            return 0;
++        }
++
++        template<typename TDelegateInterface, typename TFunc>
++        ComPtr<typename Details::DelegateArgTraitsHelper<TDelegateInterface>::Interface> Callback(TFunc* callback) noexcept {
++            return 0;
++        };
++
++        template<typename TDelegateInterface, typename TCallbackObject, typename... TArgs>
++        ComPtr<typename Details::DelegateArgTraitsHelper<TDelegateInterface>::Interface> Callback(TCallbackObject *object, HRESULT(TCallbackObject::* method)(TArgs...)) noexcept {
++            return 0;
++        }
++
++        template<typename TDelegateInterface>
++        HRESULT WeakReferenceCallback(IWeakReferenceSource* innerCallback, TDelegateInterface** callback) {
++            return 0;
++        }
++
++        template<typename TDelegateInterface>
++        HRESULT WeakReferenceCallback(TDelegateInterface* innerCallback, TDelegateInterface** callback) {
++            return 0;
++        }
++
++        template<typename T, typename TDelegateInterface, typename ...TArgs>
++        HRESULT WeakReferenceCallback(T* targetObject, HRESULT (T::*targetMethod)(TArgs... args), TDelegateInterface** callback) {
++            return 0;
++        }
++
++        template<typename T, typename TDelegateInterface, typename ...TArgs>
++        HRESULT WeakReferenceCallback(T* targetObject, HRESULT(T::*targetMethod)(TArgs... args), ::Microsoft::WRL::Details::ComPtrRef< ::Microsoft::WRL::ComPtr<TDelegateInterface>> callback) {
++            return 0;
++        }
++
++        namespace Details {
++
++            class EventTargetArray WrlSealed : public ::Microsoft::WRL::RuntimeClass< ::Microsoft::WRL::RuntimeClassFlags<ClassicCom>, IUnknown > {
++            public:
++                EventTargetArray() noexcept {}
++
++                HRESULT RuntimeClassInitialize(size_t items) noexcept {
++                    return 0;
++                }
++
++                ~EventTargetArray() noexcept
++                {
++                    delete[] begin_;
++                    delete[] bucketAssists_;
++                }
++
++                ComPtr<IUnknown>* Begin() noexcept {
++                    return nullptr;
++                }
++
++                ComPtr<IUnknown>* End() noexcept {
++                    return nullptr;
++                }
++
++                void AddTail(IUnknown* element) noexcept {
++                }
++
++                void AddTail(IUnknown* element, void *bucketAssist) noexcept {
++                }
++
++                size_t Length() noexcept {
++                    return 0;
++                }
++
++                void **Begin_BucketAssists() {
++                    return nullptr;
++                }
++
++                void **End_BucketAssists() {
++                    return nullptr;
++                }
++
++            private:
++                ComPtr<IUnknown>* begin_;
++
++                ComPtr<IUnknown>* end_;
++
++                void **bucketAssists_;
++            };
++        }
++
++        template<>
++        struct InvokeTraits<FireAll>
++        {
++            template<typename TInvokeMethod, typename TDelegateInterface>
++            static HRESULT InvokeDelegates(TInvokeMethod invokeOne, Details::EventTargetArray *targetArray, EventSource<TDelegateInterface, InvokeModeOptions<FireAll>>* pEvent) {
++                return 0;
++            }
++        };
++
++        template<>
++        struct InvokeTraits<StopOnFirstError>
++        {
++            template<typename TInvokeMethod, typename TDelegateInterface>
++            static HRESULT InvokeDelegates(TInvokeMethod invokeOne, Details::EventTargetArray *targetArray, EventSource<TDelegateInterface, InvokeModeOptions<StopOnFirstError>>* pEvent) {
++                return 0;
++            }
++        };
++
++        template<typename TDelegateInterface, typename TEventSourceOptions>
++        class EventSource {
++        public:
++            EventSource() noexcept {}
++
++            HRESULT Add(TDelegateInterface* delegateInterface, EventRegistrationToken* token) noexcept {
++                return 0;
++            }
++
++            HRESULT Remove(EventRegistrationToken token) noexcept {
++                return 0;
++            }
++
++        protected:
++
++            HRESULT Add(TDelegateInterface* delegateInterface, void *bucketAssist, EventRegistrationToken* token) noexcept {
++                return 0;
++            }
++
++        private:
++
++            HRESULT AddInternal(TDelegateInterface* delegateInterface, void *bucketAssist, EventRegistrationToken* token) noexcept {
++                return 0;
++            }
++
++            template <typename TInvokeMethod>
++            HRESULT DoInvoke(TInvokeMethod invokeOne) noexcept {
++                return 0;
++            }
++
++        public:
++            template<typename ...TArgs>
++            HRESULT InvokeAll(TArgs... args) noexcept {
++                return 0;
++            }
++
++            size_t GetSize() const noexcept {
++                return 0;
++            }
++
++        protected:
++            ComPtr<Details::EventTargetArray> targets_;
++
++            mutable Wrappers::SRWLock targetsPointerLock_;
++
++            Wrappers::SRWLock addRemoveLock_;
++        };
++    }
++}
++
++#include <poppack.h>
++
++#endif
+diff --git a/mingw-w64-headers/include/wrl/implements.h b/mingw-w64-headers/include/wrl/implements.h
+new file mode 100644
+index 000000000..9d5fe962f
+--- /dev/null
++++ b/mingw-w64-headers/include/wrl/implements.h
+@@ -0,0 +1,619 @@
++#ifndef _WRL_IMPLEMENTS_H_
++#define _WRL_IMPLEMENTS_H_
++
++#include <weakreference.h>
++
++#include <wrl\client.h>
++
++#include <pshpack8.h>
++
++
++namespace Microsoft {
++    namespace WRL {
++        template<typename T>
++        struct CloakedIid : T {};
++
++        enum RuntimeClassType {
++            WinRt                   = 0x0001,
++            ClassicCom              = 0x0002,
++            WinRtClassicComMix      = WinRt | ClassicCom,
++            InhibitWeakReference    = 0x0004,
++            Delegate                = ClassicCom,
++            InhibitFtmBase          = 0x0008,
++            InhibitRoOriginateError = 0x0010
++        };
++
++        template <unsigned int flags>
++        struct RuntimeClassFlags {
++            static const unsigned int value = flags;
++        };
++
++        namespace Details {
++            struct ImplementsBase {};
++        }
++
++        template<typename Derived, typename MixInType, bool hasImplements>
++        struct MixIn {};
++
++        template <typename FactoryInterface>
++        class ComposableBase {};
++
++        typedef RuntimeClassFlags<WinRt | InhibitWeakReference> InhibitWeakReferencePolicy;
++
++        namespace Details {
++
++            class Nil {};
++
++            class DontUseNewUseMake {
++            private:
++                void* operator new(size_t) throw() {
++                    return nullptr;
++                }
++
++            public:
++                void* operator new(size_t, void* placement) throw() {
++                    return nullptr;
++                }
++            };
++
++            class RuntimeClassBase {};
++
++            template <unsigned int RuntimeClassTypeT>
++            class RuntimeClassBaseT : private RuntimeClassBase {
++            protected:
++                template<typename T>
++                static HRESULT AsIID(T* implements, REFIID riid, void **ppvObject) throw() {
++                    return 0;
++                }
++
++                template<typename T>
++                static HRESULT GetImplementedIIDS(T* implements, ULONG *iidCount, IID **iids) throw() {
++                    return 0;
++                }
++
++            public:
++                HRESULT RuntimeClassInitialize() throw() {
++                    return 0;
++                }
++            };
++
++            class FtmBaseMarker {};
++
++            template <typename I, typename Base>
++            struct VerifyInheritanceHelper {
++                static void Verify() throw() {}
++            };
++
++            template <typename I>
++            struct VerifyInheritanceHelper<I, Nil> {
++                static void Verify() throw() {}
++            };
++        }
++
++        template <typename I0, typename I1, typename I2 = Details::Nil, typename I3 = Details::Nil,
++                typename I4 = Details::Nil, typename I5 = Details::Nil, typename I6 = Details::Nil,
++                typename I7 = Details::Nil, typename I8 = Details::Nil, typename I9 = Details::Nil>
++        struct ChainInterfaces : I0
++        {
++        protected:
++            template<unsigned int ClassType>
++            static void Verify() throw() {}
++
++            HRESULT CanCastTo(REFIID riid, void **ppv) throw() {
++                return 0;
++            }
++
++            IUnknown* CastToUnknown() throw() {
++                return nullptr;
++            }
++
++            static const unsigned long IidCount;
++
++            static void FillArrayWithIid(unsigned long *index, IID* iids) throw() {}
++        };
++
++        template <typename DerivedType, typename BaseType, bool hasImplements, typename I1, typename I2, typename I3,
++                typename I4, typename I5, typename I6,
++                typename I7, typename I8, typename I9>
++        struct ChainInterfaces<MixIn<DerivedType, BaseType, hasImplements>, I1, I2, I3, I4, I5, I6, I7, I8, I9>
++        {
++        protected:
++            template<unsigned int ClassType>
++            static void Verify() throw() {}
++
++            HRESULT CanCastTo(REFIID riid, void **ppv) throw() {
++                return 0;
++            }
++
++            IUnknown* CastToUnknown() throw() {
++                return nullptr;
++            }
++
++            static const unsigned long IidCount;
++
++            static void FillArrayWithIid(unsigned long *index, IID* iids) throw() {}
++        };
++
++        namespace Details {
++            template <typename RuntimeClassFlagsT, bool doStrictCheck, typename ...TInterfaces>
++            struct __declspec(novtable) ImplementsHelper;
++
++            template <typename RuntimeClassFlagsT, bool doStrictCheck, typename I0, typename ...TInterfaces>
++            struct __declspec(novtable) ImplementsHelper<RuntimeClassFlagsT, doStrictCheck, I0, TInterfaces...> : I0, ImplementsHelper<RuntimeClassFlagsT, true, TInterfaces...> {
++            protected:
++                template <unsigned int RuntimeClassTypeT> friend class Details::RuntimeClassBaseT;
++
++                template <bool IsDelegateToClass>
++                HRESULT CanCastToHelper(REFIID riid, void **ppv, bool *pRefDelegated) throw();
++
++                template <>
++                HRESULT inline CanCastToHelper<true>(REFIID riid, void **ppv, bool *pRefDelegated) throw() {
++                    return 0;
++                }
++
++                template <>
++                HRESULT inline CanCastToHelper<false>(REFIID riid, void **ppv, bool *pRefDelegated) throw() {
++                    return 0;
++                }
++
++                HRESULT CanCastTo(REFIID riid, void **ppv, bool *pRefDelegated) throw() {
++                    return 0;
++                }
++
++                template <bool IsDelegateToClass> IUnknown* CastToUnknownHelper() throw();
++
++                template <> inline IUnknown* CastToUnknownHelper<true>() throw() {
++                    return nullptr;
++                }
++
++                template <> inline IUnknown* CastToUnknownHelper<false>() throw() {
++                    return nullptr;
++                }
++
++                IUnknown* CastToUnknown() throw() {
++                    return nullptr;
++                }
++
++                template <bool IsDelegateToClass> long GetIidCountHelper() throw();
++
++                template <> inline long GetIidCountHelper<true>() throw() {
++                    return 0;
++                }
++
++                template <> inline long GetIidCountHelper<false>() throw() {
++                    return 0;
++                }
++
++                unsigned long GetIidCount() throw() {
++                    return 0;
++                }
++
++                template <bool IsDelegateToClass> void FillArrayWithIidHelper(unsigned long *index, IID* iids) throw();
++
++                template <> inline void FillArrayWithIidHelper<true>(unsigned long *index, IID* iids) throw() {}
++
++                template <> inline void FillArrayWithIidHelper<false>(unsigned long *index, IID* iids) throw() {}
++
++                void FillArrayWithIid(unsigned long *index, IID* iids) throw() {}
++            };
++
++            template <typename RuntimeClassFlagsT, bool doStrictCheck, typename ...TInterfaces>
++            struct __declspec(novtable) ImplementsHelper<RuntimeClassFlagsT, doStrictCheck, Details::Nil, TInterfaces...> : ImplementsHelper<RuntimeClassFlagsT, doStrictCheck, TInterfaces...> {
++            protected:
++                template <unsigned int RuntimeClassTypeT> friend class Details::RuntimeClassBaseT;
++
++                HRESULT CanCastTo(REFIID riid, void **ppv, bool * pRefDelegated) throw() {
++                    return 0;
++                }
++
++                unsigned long GetIidCount() throw() {
++                    return 0;
++                }
++
++                void FillArrayWithIid(unsigned long *index, IID* iids) throw() {}
++            };
++
++            template <typename RuntimeClassFlagsT, bool doStrictCheck>
++            struct __declspec(novtable) ImplementsHelper<RuntimeClassFlagsT, doStrictCheck>
++            {
++            protected:
++                template <unsigned int RuntimeClassTypeT> friend class Details::RuntimeClassBaseT;
++
++                HRESULT CanCastTo(REFIID, void **, bool*) throw() {
++                    return 0;
++                }
++
++                unsigned long GetIidCount() throw() {
++                    return 0;
++                }
++
++                void FillArrayWithIid(unsigned long*, IID*) throw() {}
++            };
++
++            template <typename RuntimeClassFlagsT, bool doStrictCheck, typename I0, typename ...TInterfaces>
++            struct __declspec(novtable) ImplementsHelper<RuntimeClassFlagsT, doStrictCheck, CloakedIid<I0>, TInterfaces...> : ImplementsHelper<RuntimeClassFlagsT, doStrictCheck, I0>, ImplementsHelper<RuntimeClassFlagsT, true, TInterfaces...> {
++            protected:
++                template <unsigned int RuntimeClassTypeT> friend class Details::RuntimeClassBaseT;
++
++                HRESULT CanCastTo(REFIID riid, void **ppv, bool *pRefDelegated) throw() {
++                    return 0;
++                }
++
++                IUnknown* CastToUnknown() throw() {
++                    return 0;
++                }
++
++                unsigned long GetIidCount() throw() {
++                    return 0;
++                }
++
++                void FillArrayWithIid(unsigned long *index, IID* iids) throw() {}
++            };
++
++            template <typename RuntimeClassFlagsT, bool doStrictCheck, typename C0, typename C1, typename C2, typename C3, typename C4, typename C5, typename C6, typename C7, typename C8, typename C9, typename ...TInterfaces>
++            struct __declspec(novtable) ImplementsHelper<RuntimeClassFlagsT, doStrictCheck, ChainInterfaces<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9>, TInterfaces...> : ChainInterfaces<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9>, ImplementsHelper<RuntimeClassFlagsT, true, TInterfaces...> {
++            protected:
++                template <unsigned int RuntimeClassTypeT> friend class Details::RuntimeClassBaseT;
++
++                HRESULT CanCastTo(REFIID riid, void **ppv, bool *pRefDelegated) throw() {
++                    return 0;
++                }
++
++                IUnknown* CastToUnknown() throw() {
++                    return nullptr;
++                }
++
++                unsigned long GetIidCount() throw() {
++                    return 0;
++                }
++
++                void FillArrayWithIid(unsigned long *index, IID* iids) throw() {}
++            };
++
++            template <typename RuntimeClassFlagsT, typename DerivedType, typename BaseType, bool hasImplements, typename ...TInterfaces, bool doStrictCheck>
++            struct __declspec(novtable) ImplementsHelper<RuntimeClassFlagsT, doStrictCheck, MixIn<DerivedType, BaseType, hasImplements>, TInterfaces...> : ImplementsHelper<RuntimeClassFlagsT, true, TInterfaces...> {
++            protected:
++                template <unsigned int RuntimeClassTypeT> friend class Details::RuntimeClassBaseT;
++
++                HRESULT CanCastTo(REFIID riid, void **ppv, bool *pRefDelegated) throw() {
++                    return 0;
++                }
++
++                IUnknown* CastToUnknown() throw() {
++                    return nullptr;
++                }
++
++                unsigned long GetIidCount() throw() {
++                    return 0;
++                }
++
++                void FillArrayWithIid(unsigned long *index, IID* iids) throw() {}
++            };
++
++            template <typename I0, typename ...>
++            struct AreAllNil {
++                static const bool value = false;
++            };
++
++            template <typename ...TInterfaces>
++            struct AreAllNil<Microsoft::WRL::Details::Nil, TInterfaces...> {
++                static const bool value = AreAllNil<TInterfaces...>::value;
++            };
++
++            template <>
++            struct AreAllNil<Microsoft::WRL::Details::Nil> {
++                static const bool value = true;
++            };
++
++            template <typename RuntimeClassFlagsT, typename FactoryInterface, bool doStrictCheck, typename ...TInterfaces>
++            struct __declspec(novtable) ImplementsHelper<RuntimeClassFlagsT, doStrictCheck, ComposableBase<FactoryInterface>, TInterfaces...> : ImplementsHelper<RuntimeClassFlagsT, true, ComposableBase<FactoryInterface>> {
++            protected:
++                template <unsigned int RuntimeClassTypeT> friend class Details::RuntimeClassBaseT;
++
++                typedef ImplementsHelper<RuntimeClassFlagsT, true, ComposableBase<FactoryInterface>> Base;
++
++                HRESULT CanCastTo(REFIID riid, void **ppv, bool *pRefDelegated) throw() {
++                    return 0;
++                }
++
++                IUnknown* CastToUnknown() throw() {
++                    return 0;
++                }
++
++                unsigned long GetIidCount() throw() {
++                    return 0;
++                }
++
++                void FillArrayWithIid(unsigned long *index, IID* iids) throw() {}
++            };
++
++            template <typename RuntimeClassFlagsT, typename FactoryInterface, bool doStrictCheck>
++            struct __declspec(novtable) ImplementsHelper<RuntimeClassFlagsT, doStrictCheck, ComposableBase<FactoryInterface>> {
++            protected:
++                template <unsigned int RuntimeClassTypeT> friend class Details::RuntimeClassBaseT;
++
++                HRESULT CanCastTo(REFIID riid, void **ppv, bool *pRefDelegated) throw() {
++                    return 0;
++                }
++
++                IUnknown* CastToUnknown() throw() {
++                    return nullptr;
++                }
++
++                unsigned long GetIidCount() throw() {
++                    return 0;
++                }
++
++                void FillArrayWithIid(unsigned long *index, IID* iids) throw() {}
++
++                ImplementsHelper() throw() {}
++
++                ~ImplementsHelper() throw() {}
++
++            public:
++                HRESULT SetComposableBasePointers(IInspectable* base, FactoryInterface* baseFactory) throw() {
++                    return 0;
++                }
++
++                ComPtr<IInspectable> GetComposableBase() throw() {
++                    return composableBase_;
++                }
++
++                ComPtr<FactoryInterface> GetComposableBaseFactory() throw() {
++                    return composableBaseFactory_;
++                }
++
++            private:
++                ComPtr<IInspectable> composableBase_;
++
++                ComPtr<FactoryInterface> composableBaseFactory_;
++
++                IID *iidsCached_;
++
++                unsigned long iidCount_;
++            };
++
++        }
++
++        template <typename I0, typename ...TInterfaces>
++        struct __declspec(novtable) Implements : Details::ImplementsHelper<RuntimeClassFlags<WinRt>, true, I0, TInterfaces...>, Details::ImplementsBase {
++        public:
++            typedef RuntimeClassFlags<WinRt> ClassFlags;
++
++            typedef I0 FirstInterface;
++
++        protected:
++            HRESULT CanCastTo(REFIID riid, void **ppv) throw() {
++                return 0;
++            }
++
++            IUnknown* CastToUnknown() throw() {
++                return nullptr;
++            }
++
++            unsigned long GetIidCount() throw() {
++                return 0;
++            }
++
++            void FillArrayWithIid(unsigned long *index, IID* iids) throw() {}
++        };
++
++        template <int flags, typename I0, typename ...TInterfaces>
++        struct __declspec(novtable) Implements<RuntimeClassFlags<flags>, I0, TInterfaces...> : Details::ImplementsHelper<RuntimeClassFlags<flags>, true, I0, TInterfaces...>, Details::ImplementsBase {
++        public:
++            typedef RuntimeClassFlags<flags> ClassFlags;
++
++            typedef I0 FirstInterface;
++
++        protected:
++            HRESULT CanCastTo(REFIID riid, void **ppv) throw() {
++                return 0;
++            }
++
++            IUnknown* CastToUnknown() throw() {
++                return nullptr;
++            }
++
++            unsigned long GetIidCount() throw() {
++                return 0;
++            }
++
++            void FillArrayWithIid(unsigned long *index, IID* iids) throw() {}
++        };
++
++        class FtmBase : public Implements< ::Microsoft::WRL::RuntimeClassFlags<WinRtClassicComMix>, ::Microsoft::WRL::CloakedIid< ::IMarshal> >, private ::Microsoft::WRL::Details::FtmBaseMarker {
++        protected:
++            template <typename RuntimeClassFlagsT, bool doStrictCheck, typename ...TInterfaces> friend struct Details::ImplementsHelper;
++
++            HRESULT CanCastTo(REFIID riid, void **ppv) throw() {
++                return 0;
++            }
++
++        public:
++            FtmBase() throw() {}
++
++            STDMETHOD(GetUnmarshalClass)(REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *pCid) override {
++                return 0;
++            }
++
++            STDMETHOD(GetMarshalSizeMax)(REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, DWORD *pSize) override {
++                return 0;
++            }
++
++            STDMETHOD(MarshalInterface)(IStream *pStm, REFIID riid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags) override {
++                return 0;
++            }
++
++            STDMETHOD(UnmarshalInterface)(IStream *pStm, REFIID riid, void **ppv) override {
++                return 0;
++            }
++
++            STDMETHOD(ReleaseMarshalData)(IStream *pStm) override {
++                return 0;
++            }
++
++            STDMETHOD(DisconnectObject)(DWORD dwReserved) override {
++                return 0;
++            }
++
++            static HRESULT CreateGlobalInterfaceTable(IGlobalInterfaceTable **git) throw() {
++                return 0;
++            }
++
++            ::Microsoft::WRL::ComPtr<IMarshal> marshaller_;
++        };
++
++        namespace Details {
++            #define DETAILS_RTCLASS_FLAGS_ARGUMENTS(RuntimeClassFlagsT) \
++                RuntimeClassFlagsT, \
++                (RuntimeClassFlagsT::value & InhibitWeakReference) == 0, \
++                (RuntimeClassFlagsT::value & WinRt) == WinRt, \
++                __WRL_IMPLEMENTS_FTM_BASE__(RuntimeClassFlagsT::value) \
++
++            template <class RuntimeClassFlagsT, bool implementsWeakReferenceSource, bool implementsInspectable, bool implementsFtmBase, typename ...TInterfaces>
++            class __declspec(novtable) RuntimeClassImpl;
++
++            template <class RuntimeClassFlagsT, bool implementsWeakReferenceSource, bool implementsFtmBase, typename ...TInterfaces>
++            class __declspec(novtable) RuntimeClassImpl<RuntimeClassFlagsT, implementsWeakReferenceSource, false, implementsFtmBase, TInterfaces...> : public Details::ImplementsHelper<RuntimeClassFlagsT, false, TInterfaces...>, public RuntimeClassBaseT<RuntimeClassFlagsT::value>, protected RuntimeClassFlags<InhibitWeakReference>, public DontUseNewUseMake {
++            public:
++                typedef RuntimeClassFlagsT ClassFlags;
++
++                STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject) {
++                    return 0;
++                }
++
++                STDMETHOD_(ULONG, AddRef)() {
++                    return 0;
++                }
++
++                STDMETHOD_(ULONG, Release)() {
++                    return 0;
++                }
++
++            protected:
++                RuntimeClassImpl() throw() {}
++
++                virtual ~RuntimeClassImpl() throw() {}
++
++                unsigned long InternalAddRef() throw() {
++                    return 0;
++                }
++
++                unsigned long InternalRelease() throw() {
++                    return 0;
++                }
++
++                unsigned long GetRefCount() const throw() {
++                    return 0;
++                }
++
++                friend class WeakReferenceImpl;
++
++            private:
++                volatile long refcount_;
++            };
++
++            template<typename I, bool isImplementsBased = __is_base_of(ImplementsBase, I)>
++            struct HasIInspectable;
++
++            template<typename I>
++            struct HasIInspectable<I, false> {
++                static const bool isIInspectable;
++            };
++
++            template<typename I>
++            struct HasIInspectable<I, true> {
++                static const bool isIInspectable;
++            };
++
++            template<typename I0, bool isIInspectable = true>
++            struct IInspectableInjector;
++
++            template<typename I0>
++            struct IInspectableInjector<I0, true> {
++                typedef Details::Nil InspectableIfNeeded;
++            };
++
++            template<typename I0>
++            struct IInspectableInjector<I0, false> {
++                typedef IInspectable InspectableIfNeeded;
++            };
++
++            template <class RuntimeClassFlagsT, typename I0, typename ...TInterfaces>
++            class __declspec(novtable) RuntimeClassImpl<RuntimeClassFlagsT, false, true, false, I0, TInterfaces...> : public Details::ImplementsHelper<RuntimeClassFlagsT, false, typename IInspectableInjector<I0>::InspectableIfNeeded, I0, TInterfaces...>, public RuntimeClassBaseT<RuntimeClassFlagsT::value>, protected RuntimeClassFlags<InhibitWeakReference>, public DontUseNewUseMake {
++            public:
++                typedef RuntimeClassFlagsT ClassFlags;
++
++                STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject) {
++                    return 0;
++                }
++
++                STDMETHOD_(ULONG, AddRef)() {
++                    return 0;
++                }
++
++                STDMETHOD_(ULONG, Release)() {
++                    return 0;
++                }
++
++                STDMETHOD(GetIids)(ULONG *iidCount, IID **iids) {
++                    return 0;
++                }
++
++            protected:
++                RuntimeClassImpl() throw() {}
++
++                virtual ~RuntimeClassImpl() throw() {}
++
++                unsigned long InternalAddRef() throw() {
++                    return 0;
++                }
++
++                unsigned long InternalRelease() throw() {
++                    return 0;
++                }
++
++                unsigned long GetRefCount() const throw() {
++                    return 0;
++                }
++
++            private:
++                volatile long refcount_;
++            };
++
++            template <class RuntimeClassFlagsT, typename I0, typename ...TInterfaces>
++            class __declspec(novtable) RuntimeClassImpl<RuntimeClassFlagsT, false, true, true, I0, TInterfaces...> : public RuntimeClassImpl<RuntimeClassFlagsT, false, true, false, I0, TInterfaces...> {};
++
++            template <class RuntimeClassFlagsT, typename I0, typename ...TInterfaces>
++            class __declspec(novtable) RuntimeClassImpl<RuntimeClassFlagsT, true, true, true, I0, TInterfaces...> : public RuntimeClassImpl<RuntimeClassFlagsT, true, true, false, I0, FtmBase, TInterfaces...> {};
++        }
++
++        template <typename ...TInterfaces>
++        class RuntimeClass : public Details::RuntimeClassImpl<DETAILS_RTCLASS_FLAGS_ARGUMENTS(RuntimeClassFlags<WinRt>), TInterfaces...> {
++            RuntimeClass(const RuntimeClass&);
++
++            RuntimeClass& operator=(const RuntimeClass&);
++
++        public:
++            RuntimeClass() throw() {}
++
++            typedef RuntimeClass RuntimeClassT;
++        };
++
++        template <unsigned int classFlags, typename ...TInterfaces>
++        class RuntimeClass<RuntimeClassFlags<classFlags>, TInterfaces...> : public Details::RuntimeClassImpl<DETAILS_RTCLASS_FLAGS_ARGUMENTS(RuntimeClassFlags<classFlags>), TInterfaces...> {
++            RuntimeClass(const RuntimeClass&);
++
++            RuntimeClass& operator=(const RuntimeClass&);
++
++        public:
++            RuntimeClass() throw() {}
++
++            typedef RuntimeClass RuntimeClassT;
++        };
++    }
++}
++
++#include <poppack.h>
++
++#endif
+diff --git a/mingw-w64-headers/include/wrl/internal.h b/mingw-w64-headers/include/wrl/internal.h
+index 715ef74e3..dffa7153d 100644
+--- a/mingw-w64-headers/include/wrl/internal.h
++++ b/mingw-w64-headers/include/wrl/internal.h
+@@ -7,6 +7,8 @@
+ #ifndef _WRL_INTERNAL_H_
+ #define _WRL_INTERNAL_H_
+ 
++#define __WRL_IMPLEMENTS_FTM_BASE__(flags) (false)
++
+ #include <windows.h>
+ 
+ namespace Microsoft {
+@@ -29,6 +31,26 @@ namespace Microsoft {
+             struct EnableIf<true, T> {
+                 typedef T type;
+             };
++
++            template<class T>
++            struct RemoveReference {
++                typedef T Type;
++            };
++
++            template<class T>
++            struct RemoveReference<T&> {
++                typedef T Type;
++            };
++
++            template<class T>
++            struct RemoveReference<T&&> {
++                typedef T Type;
++            };
++
++            template<class T>
++            inline typename RemoveReference<T>::Type&& Move(T&& arg) throw() {
++                return nullptr;
++            }
+         }
+     }
+ }
+diff --git a/mingw-w64-headers/include/wrl/wrappers/corewrappers.h b/mingw-w64-headers/include/wrl/wrappers/corewrappers.h
+index 221d9cc8f..4b15f43ec 100644
+--- a/mingw-w64-headers/include/wrl/wrappers/corewrappers.h
++++ b/mingw-w64-headers/include/wrl/wrappers/corewrappers.h
+@@ -22,6 +22,129 @@ namespace Microsoft {
+         }
+ 
+         namespace Wrappers {
++            namespace HandleTraits {
++                struct SRWLockSharedTraits {
++                    typedef SRWLOCK* Type;
++
++                    inline static Type GetInvalidValue() throw() {
++                        return nullptr;
++                    }
++
++                    inline static void Unlock(Type srwlock) throw() {}
++                };
++
++                struct SRWLockExclusiveTraits {
++                    typedef SRWLOCK* Type;
++
++                    inline static Type GetInvalidValue() throw() {
++                        return nullptr;
++                    }
++
++                    inline static void Unlock(Type srwlock) throw() {}
++                };
++            }
++
++            class SRWLock;
++
++            namespace Details {
++                class SyncLockExclusive {
++                public:
++                    SyncLockExclusive(SyncLockExclusive&& other) throw() {}
++
++                    SyncLockExclusive(const SyncLockExclusive&);
++                    SyncLockExclusive& operator=(const SyncLockExclusive&);
++
++                    ~SyncLockExclusive() throw() {}
++
++                    void Unlock() throw() {}
++
++                    bool IsLocked() const throw() {
++                        return 0;
++                    }
++
++                    friend class Wrappers::SRWLock;
++
++                protected:
++                    explicit SyncLockExclusive(SRWLOCK* sync) throw() {}
++
++                    SRWLOCK* sync_;
++
++                private:
++                    void InternalUnlock() throw() {}
++                };
++
++                class SyncLockShared {
++                    public:
++                    SyncLockShared(SyncLockShared&& other) throw() {}
++
++                    SyncLockShared(const SyncLockShared&);
++                    SyncLockShared& operator=(const SyncLockShared&);
++
++                    ~SyncLockShared() throw() {}
++
++                    void Unlock() throw() {}
++
++                    bool IsLocked() const throw() {
++                        return 0;
++                    }
++
++                    friend class Wrappers::SRWLock;
++
++                protected:
++                    explicit SyncLockShared(SRWLOCK* sync) throw() {}
++
++                    SRWLOCK* sync_;
++
++                private:
++                    void InternalUnlock() throw() {}
++                };
++            }
++
++            class SRWLock {
++                public:
++                    SRWLock() throw() {}
++
++                    SRWLock(const SRWLock&) = delete;
++                    SRWLock& operator=(const SRWLock&) = delete;
++
++                    ~SRWLock() throw() {}
++
++                    Details::SyncLockExclusive LockExclusive() throw() {
++                        return Details::SyncLockExclusive(nullptr);
++                    }
++
++                    static Details::SyncLockExclusive LockExclusive(SRWLOCK* lock) throw() {
++                        return Details::SyncLockExclusive(nullptr);
++                    }
++
++                    Details::SyncLockExclusive TryLockExclusive() throw() {
++                        return Details::SyncLockExclusive(nullptr);
++                    }
++
++                    static Details::SyncLockExclusive TryLockExclusive(SRWLOCK* lock) throw() {
++                        return Details::SyncLockExclusive(nullptr);
++                    }
++
++                    Details::SyncLockShared LockShared() throw() {
++                        return Details::SyncLockShared(nullptr);
++                    }
++
++                    static Details::SyncLockShared LockShared(SRWLOCK* lock) throw() {
++                        return Details::SyncLockShared(nullptr);
++                    }
++
++                    Details::SyncLockShared TryLockShared() throw() {
++                        return Details::SyncLockShared(nullptr);
++                    }
++
++                    static Details::SyncLockShared TryLockShared(SRWLOCK* lock) throw() {
++                        return Details::SyncLockShared(nullptr);
++                    }
++
++                protected:
++                    SRWLOCK SRWLock_;
++            };
++
+             class HStringReference {
+             private:
+                 void Init(const wchar_t* str, unsigned int len) {


=====================================
projects/translation/config
=====================================
@@ -12,7 +12,7 @@ compress_tar: 'gz'
 steps:
   base-browser:
     base-browser: '[% INCLUDE build %]'
-    git_hash: 3b1be2065b54939ed019d94174f137847bcf3c66
+    git_hash: f7c77f129447921ec1490f5f401ee27e474b932a
     targets:
       nightly:
         git_hash: 'base-browser'


=====================================
rbm.conf
=====================================
@@ -73,17 +73,20 @@ buildconf:
   git_signtag_opt: '-s'
 
 var:
-  torbrowser_version: '14.0.1'
-  torbrowser_build: 'build2'
+  torbrowser_version: '[% IF c("var/tor-browser") %]14.0.1[% ELSE %]14.0a10[% END %]'
+  torbrowser_build: 'build1'
   # This should be the date of when the build is started. For the build
   # to be reproducible, browser_release_date should always be in the past.
-  browser_release_date: '2024/10/28 09:00:00'
+  browser_release_date: '2024/10/31 19:43:38'
   browser_release_date_timestamp: '[% USE date; date.format(c("var/browser_release_date"), "%s") %]'
   updater_enabled: 1
   build_mar: 1
   torbrowser_incremental_from:
+    - '[% IF c("var/mullvad-browser") %]14.0a9[% END %]'
+    - '[% IF c("var/mullvad-browser") %]14.0a8[% END %]'
+    - '[% IF c("var/mullvad-browser") %]14.0a7[% END %]'
     - '[% IF c("var/tor-browser") %]14.0[% END %]'
-    - '13.5.7'
+    - '[% IF c("var/tor-browser") %]13.5.7[% END %]'
   mar_channel_id: '[% c("var/projectname") %]-torproject-[% c("var/channel") %]'
 
   torbrowser_legacy_version: 13.5.9



View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/4a836c670bf62b6f78ef6024b775bc7b35bc0f4c...f9e2c4dd4c3b2e52e3c58f2edfebaa520342d32e

-- 
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/4a836c670bf62b6f78ef6024b775bc7b35bc0f4c...f9e2c4dd4c3b2e52e3c58f2edfebaa520342d32e
You're receiving this email because of your account on gitlab.torproject.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tor-commits/attachments/20241031/5eea9486/attachment-0001.htm>


More information about the tor-commits mailing list