diff --git a/contrib/src/freetype2/SHA512SUMS b/contrib/src/freetype2/SHA512SUMS
index c443586d9c86d64c1099efb16839ab657a0c8dad..5f7a24b5cc5582fac4ddba1fc99a1a634bbdbec1 100644
--- a/contrib/src/freetype2/SHA512SUMS
+++ b/contrib/src/freetype2/SHA512SUMS
@@ -1 +1 @@
-827cda734aa6b537a8bcb247549b72bc1e082a5b32ab8d3cccb7cc26d5f6ee087c19ce34544fa388a1eb4ecaf97600dbabc3e10e950f2ba692617fee7081518f  freetype-2.10.4.tar.xz
+0848678482fbe20603a866f02da82c91122014d6f815ba4f1d9c03601c32e3ceb781f721c2b4427b6117d7c9742018af8dbb26566faf018595c70b50f8db3f08  freetype-2.11.1.tar.xz
diff --git a/contrib/src/freetype2/rules.mak b/contrib/src/freetype2/rules.mak
index e086df23fe40f27c2d948fc2e5b4fbde08656f42..a7b789e0de9906c608bf01dcb42c60f9929f4414 100644
--- a/contrib/src/freetype2/rules.mak
+++ b/contrib/src/freetype2/rules.mak
@@ -1,6 +1,6 @@
 # freetype2
 
-FREETYPE2_VERSION := 2.10.4
+FREETYPE2_VERSION := 2.11.1
 FREETYPE2_URL := $(SF)/freetype/freetype2/$(FREETYPE2_VERSION)/freetype-$(FREETYPE2_VERSION).tar.xz
 
 PKGS += freetype2
@@ -15,6 +15,7 @@ $(TARBALLS)/freetype-$(FREETYPE2_VERSION).tar.xz:
 
 freetype: freetype-$(FREETYPE2_VERSION).tar.xz .sum-freetype2
 	$(UNPACK)
+	$(APPLY) $(SRC)/freetype2/uwpfixes.patch
 	$(call pkg_static, "builds/unix/freetype2.in")
 	$(MOVE)
 
diff --git a/contrib/src/freetype2/uwpfixes.patch b/contrib/src/freetype2/uwpfixes.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4f1f71b570490ed27045284568e61b6ac47245cd
--- /dev/null
+++ b/contrib/src/freetype2/uwpfixes.patch
@@ -0,0 +1,38 @@
+diff --git a/builds/windows/ftsystem.c b/builds/windows/ftsystem.c
+index 1ebadd49f..ac8ff1f92 100644
+--- a/builds/windows/ftsystem.c
++++ b/builds/windows/ftsystem.c
+@@ -28,6 +28,7 @@
+   /* memory mapping and allocation includes and definitions */
+ #define WIN32_LEAN_AND_MEAN
+ #include <windows.h>
++#include <winapifamily.h>
+ 
+ 
+   /**************************************************************************
+@@ -296,7 +297,11 @@
+       goto Fail_Open;
+     }
+ 
++#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+     fm = CreateFileMapping( file, NULL, PAGE_READONLY, 0, 0, NULL );
++#else
++    fm = CreateFileMappingFromApp( file, NULL, PAGE_READONLY, 0, NULL );
++#endif
+     if ( fm == NULL )
+     {
+       FT_ERROR(( "FT_Stream_Open: can not map file\n" ));
+@@ -308,8 +313,13 @@
+     /* a size greater than LONG_MAX                                    */
+     stream->size = size.LowPart;
+     stream->pos  = 0;
++#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+     stream->base = (unsigned char *)
+                      MapViewOfFile( fm, FILE_MAP_READ, 0, 0, 0 );
++#else
++    stream->base = (unsigned char *)
++                     MapViewOfFileFromApp( fm, FILE_MAP_READ, 0, 0 );
++#endif
+ 
+     CloseHandle( fm );
+