From 1932aafbe618ae96144e42fcc6ac1f0e29a27fd8 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Thu, 20 Mar 2025 03:01:30 +0300
Subject: [PATCH] upgrade vendored harfbuzz to 8.5.0,
- fix cmake setup so that the optional freetype symbols
can actually be used in our vendored harfbuzz,
- support Windows- and Apple-specific harfbuzz backends,
- minor update to vendored freetype along the way.
Reference issue: https://github.com/libsdl-org/SDL_ttf/issues/532
(cherry picked from commit f16ae21bd5101b6df711ece19bb3aaa9d1cadf52)
---
.gitmodules | 2 +-
CMakeLists.txt | 38 +++++++++++++++++++++++--
VisualC/SDL_ttf.vcxproj | 24 ++++++++--------
Xcode/SDL_ttf.xcodeproj/project.pbxproj | 12 ++++++++
external/freetype | 2 +-
external/harfbuzz | 2 +-
6 files changed, 62 insertions(+), 18 deletions(-)
diff --git a/.gitmodules b/.gitmodules
index ee071a61..2ea6a679 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -5,7 +5,7 @@
[submodule "external/harfbuzz"]
path = external/harfbuzz
url = https://github.com/libsdl-org/harfbuzz.git
- branch = 8.1.1-SDL
+ branch = 8.5.0-SDL
[submodule "external/plutosvg"]
path = external/plutosvg
url = https://github.com/libsdl-org/plutosvg.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 97bfdd75..2688f4ad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -242,15 +242,35 @@ if(SDLTTF_HARFBUZZ)
set(harfbuzz_include_directories)
if(SDLTTF_HARFBUZZ_VENDORED)
message(STATUS "${PROJECT_NAME}: Using vendored harfbuzz library")
+ # HB_BUILD_SUBSET variable is used by harfbuzz
+ set(HB_BUILD_SUBSET OFF CACHE BOOL "build harfbuzz-subset" FORCE)
# HB_BUILD_UTILS variable is used by harfbuzz
set(HB_BUILD_UTILS OFF CACHE BOOL "harfbuzz build utils" FORCE)
# SKIP_INSTALL_LIBRARIES variable is used by harfbuzz
set(SKIP_INSTALL_LIBRARIES ON CACHE BOOL "harfbuzz install option" FORCE)
# HB_HAVE_FREETYPE variable is used by harfbuzz
set(HB_HAVE_FREETYPE ${SDLTTF_FREETYPE} CACHE BOOL "harfbuzz freetype helpers" FORCE)
+ # target-specific harfbuzz backends :
+ if(APPLE)
+ # Minimum version for $<LINK_LIBRARY:feature,library-list>
+ cmake_minimum_required(VERSION 3.24)
+ # HB_HAVE_CORETEXT variable is used by harfbuzz
+ set(HB_HAVE_CORETEXT ON CACHE BOOL "harfbuzz coretext backend" FORCE)
+ endif()
+ if(WIN32)
+ # HB_HAVE_UNISCRIBE variable is used by harfbuzz
+ set(HB_HAVE_UNISCRIBE ON CACHE BOOL "harfbuzz uniscribe backend" FORCE)
+ # HB_HAVE_GDI variable is used by harfbuzz
+ set(HB_HAVE_GDI ON CACHE BOOL "harfbuzz windows backend" FORCE)
+ endif()
+ ## HACK: HACK: These fail detection, we rely on our own vendored FreeType having them ##
+ set(HAVE_FT_GET_VAR_BLEND_COORDINATES 1 CACHE BOOL "FT_Get_Var_Blend_Coordinates" FORCE)
+ set(HAVE_FT_SET_VAR_BLEND_COORDINATES 1 CACHE BOOL "FT_Set_Var_Blend_Coordinates" FORCE)
+ set(HAVE_FT_DONE_MM_VAR 1 CACHE BOOL "FT_Done_MM_Var" FORCE)
+ set(HAVE_FT_GET_TRANSFORM 1 CACHE BOOL "FT_Get_Transform" FORCE)
sdl_check_project_in_subfolder(external/harfbuzz harfbuzz SDLTTF_VENDORED)
add_subdirectory(external/harfbuzz EXCLUDE_FROM_ALL)
- # harfbuzz is a c++ project, enable c++ here to ensure linking to the c++ standard library
+ # harfbuzz is a c++ project, enable c++ here to ensure linking to the c++ standard library.
enable_language(CXX)
if(NOT TARGET harfbuzz::harfbuzz)
add_library(harfbuzz::harfbuzz ALIAS harfbuzz)
@@ -261,9 +281,21 @@ if(SDLTTF_HARFBUZZ)
else()
set(harfbuzz_sources $<TARGET_OBJECTS:harfbuzz::harfbuzz>)
set(harfbuzz_include_directories $<TARGET_PROPERTY:harfbuzz::harfbuzz,INTERFACE_INCLUDE_DIRECTORIES>)
- if(NOT MSVC)
+ if(WIN32)
+ # for uniscribe and gdi backends :
+ list(APPEND harfbuzz_link_libraries usp10 gdi32 rpcrt4)
+ list(APPEND PC_LIBS -lusp10 -lgdi32 -lrpcrt4)
+ elseif(APPLE)
+ # for coretext backend :
+ list(APPEND harfbuzz_link_libraries "$<LINK_LIBRARY:FRAMEWORK,CoreText>")
+ list(APPEND harfbuzz_link_libraries "$<LINK_LIBRARY:FRAMEWORK,CoreGraphics>")
+ list(APPEND harfbuzz_link_libraries "$<LINK_LIBRARY:FRAMEWORK,CoreFoundation>")
+ list(APPEND PC_LIBS "-Wl,-framework,CoreText")
+ list(APPEND PC_LIBS "-Wl,-framework,CoreGraphics")
+ list(APPEND PC_LIBS "-Wl,-framework,CoreFoundation")
+ else()
find_package(Threads)
- set(harfbuzz_link_librarise Threads::Threads)
+ set(harfbuzz_link_libraries Threads::Threads)
endif()
endif()
else()
diff --git a/VisualC/SDL_ttf.vcxproj b/VisualC/SDL_ttf.vcxproj
index a872a7df..6ff7bc20 100644
--- a/VisualC/SDL_ttf.vcxproj
+++ b/VisualC/SDL_ttf.vcxproj
@@ -88,19 +88,19 @@
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
- <IncludePath>$(ProjectDir)..\include;$(ProjectDir)..\external\freetype\include;$(ProjectDir)..\external\harfbuzz\src;$(ProjectDir)..\external\plutosvg\source;$(ProjectDir)..\external\plutovg\include;$(ProjectDir)..\..\SDL\include;$(IncludePath)</IncludePath>
+ <IncludePath>$(ProjectDir)..\include;$(ProjectDir)..\external\freetype\include;$(ProjectDir)..\external\harfbuzz;$(ProjectDir)..\external\harfbuzz\src;$(ProjectDir)..\external\plutosvg\source;$(ProjectDir)..\external\plutovg\include;$(ProjectDir)..\..\SDL\include;$(IncludePath)</IncludePath>
<LibraryPath>$(SolutionDir)..\..\SDL\VisualC\$(PlatformName)\$(Configuration);$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- <IncludePath>$(ProjectDir)..\include;$(ProjectDir)..\external\freetype\include;$(ProjectDir)..\external\harfbuzz\src;$(ProjectDir)..\external\plutosvg\source;$(ProjectDir)..\external\plutovg\include;$(ProjectDir)..\..\SDL\include;$(IncludePath)</IncludePath>
+ <IncludePath>$(ProjectDir)..\include;$(ProjectDir)..\external\freetype\include;$(ProjectDir)..\external\harfbuzz;$(ProjectDir)..\external\harfbuzz\src;$(ProjectDir)..\external\plutosvg\source;$(ProjectDir)..\external\plutovg\include;$(ProjectDir)..\..\SDL\include;$(IncludePath)</IncludePath>
<LibraryPath>$(SolutionDir)..\..\SDL\VisualC\$(PlatformName)\$(Configuration);$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- <IncludePath>$(ProjectDir)..\include;$(ProjectDir)..\external\freetype\include;$(ProjectDir)..\external\harfbuzz\src;$(ProjectDir)..\external\plutosvg\source;$(ProjectDir)..\external\plutovg\include;$(ProjectDir)..\..\SDL\include;$(IncludePath)</IncludePath>
+ <IncludePath>$(ProjectDir)..\include;$(ProjectDir)..\external\freetype\include;$(ProjectDir)..\external\harfbuzz;$(ProjectDir)..\external\harfbuzz\src;$(ProjectDir)..\external\plutosvg\source;$(ProjectDir)..\external\plutovg\include;$(ProjectDir)..\..\SDL\include;$(IncludePath)</IncludePath>
<LibraryPath>$(SolutionDir)..\..\SDL\VisualC\$(PlatformName)\$(Configuration);$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- <IncludePath>$(ProjectDir)..\include;$(ProjectDir)..\external\freetype\include;$(ProjectDir)..\external\harfbuzz\src;$(ProjectDir)..\external\plutosvg\source;$(ProjectDir)..\external\plutovg\include;$(ProjectDir)..\..\SDL\include;$(IncludePath)</IncludePath>
+ <IncludePath>$(ProjectDir)..\include;$(ProjectDir)..\external\freetype\include;$(ProjectDir)..\external\harfbuzz;$(ProjectDir)..\external\harfbuzz\src;$(ProjectDir)..\external\plutosvg\source;$(ProjectDir)..\external\plutovg\include;$(ProjectDir)..\..\SDL\include;$(IncludePath)</IncludePath>
<LibraryPath>$(SolutionDir)..\..\SDL\VisualC\$(PlatformName)\$(Configuration);$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -115,7 +115,7 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
- <PreprocessorDefinitions>DLL_EXPORT;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;TTF_USE_HARFBUZZ=1;FT_PUBLIC_FUNCTION_ATTRIBUTE=;FT_CONFIG_OPTION_USE_HARFBUZZ;FT2_BUILD_LIBRARY;HAVE_FREETYPE;TTF_USE_PLUTOSVG=1;PLUTOSVG_HAS_FREETYPE;PLUTOSVG_BUILD_STATIC;PLUTOVG_BUILD_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>DLL_EXPORT;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;TTF_USE_HARFBUZZ=1;HAVE_CONFIG_H;FT_PUBLIC_FUNCTION_ATTRIBUTE=;FT_CONFIG_OPTION_USE_HARFBUZZ;FT2_BUILD_LIBRARY;HAVE_FREETYPE;TTF_USE_PLUTOSVG=1;PLUTOSVG_HAS_FREETYPE;PLUTOSVG_BUILD_STATIC;PLUTOVG_BUILD_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
@@ -125,7 +125,7 @@
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
- <AdditionalDependencies>SDL3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>usp10.lib;gdi32.lib;rpcrt4.lib;SDL3.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>external\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@@ -143,7 +143,7 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
- <PreprocessorDefinitions>DLL_EXPORT;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;TTF_USE_HARFBUZZ=1;FT_PUBLIC_FUNCTION_ATTRIBUTE=;FT_CONFIG_OPTION_USE_HARFBUZZ;FT2_BUILD_LIBRARY;HAVE_FREETYPE;TTF_USE_PLUTOSVG=1;PLUTOSVG_HAS_FREETYPE;PLUTOSVG_BUILD_STATIC;PLUTOVG_BUILD_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>DLL_EXPORT;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;TTF_USE_HARFBUZZ=1;HAVE_CONFIG_H;FT_PUBLIC_FUNCTION_ATTRIBUTE=;FT_CONFIG_OPTION_USE_HARFBUZZ;FT2_BUILD_LIBRARY;HAVE_FREETYPE;TTF_USE_PLUTOSVG=1;PLUTOSVG_HAS_FREETYPE;PLUTOSVG_BUILD_STATIC;PLUTOVG_BUILD_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
@@ -152,7 +152,7 @@
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
- <AdditionalDependencies>SDL3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>usp10.lib;gdi32.lib;rpcrt4.lib;SDL3.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>external\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
@@ -169,7 +169,7 @@
</HeaderFileName>
</Midl>
<ClCompile>
- <PreprocessorDefinitions>DLL_EXPORT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;TTF_USE_HARFBUZZ=1;FT_PUBLIC_FUNCTION_ATTRIBUTE=;FT_CONFIG_OPTION_USE_HARFBUZZ;FT2_BUILD_LIBRARY;HAVE_FREETYPE;TTF_USE_PLUTOSVG=1;PLUTOSVG_HAS_FREETYPE;PLUTOSVG_BUILD_STATIC;PLUTOVG_BUILD_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>DLL_EXPORT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;TTF_USE_HARFBUZZ=1;HAVE_CONFIG_H;FT_PUBLIC_FUNCTION_ATTRIBUTE=;FT_CONFIG_OPTION_USE_HARFBUZZ;FT2_BUILD_LIBRARY;HAVE_FREETYPE;TTF_USE_PLUTOSVG=1;PLUTOSVG_HAS_FREETYPE;PLUTOSVG_BUILD_STATIC;PLUTOVG_BUILD_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
@@ -179,7 +179,7 @@
</ResourceCompile>
<Link>
<SubSystem>Windows</SubSystem>
- <AdditionalDependencies>SDL3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>usp10.lib;gdi32.lib;rpcrt4.lib;SDL3.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>external\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
@@ -196,7 +196,7 @@
</HeaderFileName>
</Midl>
<ClCompile>
- <PreprocessorDefinitions>DLL_EXPORT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;TTF_USE_HARFBUZZ=1;FT_PUBLIC_FUNCTION_ATTRIBUTE=;FT_CONFIG_OPTION_USE_HARFBUZZ;FT2_BUILD_LIBRARY;HAVE_FREETYPE;TTF_USE_PLUTOSVG=1;PLUTOSVG_HAS_FREETYPE;PLUTOSVG_BUILD_STATIC;PLUTOVG_BUILD_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>DLL_EXPORT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;TTF_USE_HARFBUZZ=1;HAVE_CONFIG_H;FT_PUBLIC_FUNCTION_ATTRIBUTE=;FT_CONFIG_OPTION_USE_HARFBUZZ;FT2_BUILD_LIBRARY;HAVE_FREETYPE;TTF_USE_PLUTOSVG=1;PLUTOSVG_HAS_FREETYPE;PLUTOSVG_BUILD_STATIC;PLUTOVG_BUILD_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
@@ -205,7 +205,7 @@
</ResourceCompile>
<Link>
<SubSystem>Windows</SubSystem>
- <AdditionalDependencies>SDL3.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>usp10.lib;gdi32.lib;rpcrt4.lib;SDL3.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>external\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
diff --git a/Xcode/SDL_ttf.xcodeproj/project.pbxproj b/Xcode/SDL_ttf.xcodeproj/project.pbxproj
index d5998c64..593530b7 100644
--- a/Xcode/SDL_ttf.xcodeproj/project.pbxproj
+++ b/Xcode/SDL_ttf.xcodeproj/project.pbxproj
@@ -109,6 +109,9 @@
F384BCD4261EC2BE0028A248 /* type42.c in Sources */ = {isa = PBXBuildFile; fileRef = F384BCD3261EC2BE0028A248 /* type42.c */; };
F384BCDF261EC2CF0028A248 /* winfnt.c in Sources */ = {isa = PBXBuildFile; fileRef = F384BCDE261EC2CF0028A248 /* winfnt.c */; };
F384BCF2261EC5130028A248 /* ftcache.c in Sources */ = {isa = PBXBuildFile; fileRef = F384BCF1261EC5130028A248 /* ftcache.c */; };
+ F3CD08932D8E254E00B1F9D2 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3CD08902D8E254E00B1F9D2 /* CoreText.framework */; };
+ F3CD08942D8E254E00B1F9D2 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3CD08912D8E254E00B1F9D2 /* CoreFoundation.framework */; };
+ F3CD08952D8E254E00B1F9D2 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3CD08922D8E254E00B1F9D2 /* CoreGraphics.framework */; };
F3F7BDF72CB6FD6700C984AF /* SDL_hashtable.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7BDF12CB6FD6700C984AF /* SDL_hashtable.h */; };
F3F7BDF82CB6FD6700C984AF /* stb_rect_pack.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7BDF62CB6FD6700C984AF /* stb_rect_pack.h */; };
F3F7BDF92CB6FD6700C984AF /* SDL_renderer_textengine.c in Sources */ = {isa = PBXBuildFile; fileRef = F3F7BDF32CB6FD6700C984AF /* SDL_renderer_textengine.c */; };
@@ -205,6 +208,9 @@
F384BCD3261EC2BE0028A248 /* type42.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = type42.c; path = ../external/freetype/src/type42/type42.c; sourceTree = "<group>"; };
F384BCDE261EC2CF0028A248 /* winfnt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = winfnt.c; path = ../external/freetype/src/winfonts/winfnt.c; sourceTree = "<group>"; };
F384BCF1261EC5130028A248 /* ftcache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ftcache.c; path = ../external/freetype/src/cache/ftcache.c; sourceTree = "<group>"; };
+ F3CD08902D8E254E00B1F9D2 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
+ F3CD08912D8E254E00B1F9D2 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
+ F3CD08922D8E254E00B1F9D2 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
F3E1F8752A79462A00AC76D3 /* config.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = config.xcconfig; sourceTree = "<group>"; };
F3F7BDF12CB6FD6700C984AF /* SDL_hashtable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDL_hashtable.h; sourceTree = "<group>"; };
F3F7BDF22CB6FD6700C984AF /* SDL_hashtable.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SDL_hashtable.c; sourceTree = "<group>"; };
@@ -220,7 +226,10 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ F3CD08952D8E254E00B1F9D2 /* CoreGraphics.framework in Frameworks */,
+ F3CD08932D8E254E00B1F9D2 /* CoreText.framework in Frameworks */,
F3412A342D4C8DBF00D6C2B7 /* SDL3.framework in Frameworks */,
+ F3CD08942D8E254E00B1F9D2 /* CoreFoundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -290,6 +299,9 @@
BE48FD8107AFA26B00BB41DA /* Frameworks */ = {
isa = PBXGroup;
children = (
+ F3CD08912D8E254E00B1F9D2 /* CoreFoundation.framework */,
+ F3CD08922D8E254E00B1F9D2 /* CoreGraphics.framework */,
+ F3CD08902D8E254E00B1F9D2 /* CoreText.framework */,
F3412A332D4C8DBF00D6C2B7 /* SDL3.framework */,
);
name = Frameworks;
diff --git a/external/freetype b/external/freetype
index 12c5e620..9973564c 160000
--- a/external/freetype
+++ b/external/freetype
@@ -1 +1 @@
-Subproject commit 12c5e620858bd503731091e9371d06c0a3e7c967
+Subproject commit 9973564cfa63763a3e4ac67c09147899539b1e07
diff --git a/external/harfbuzz b/external/harfbuzz
index e9847949..564bf981 160000
--- a/external/harfbuzz
+++ b/external/harfbuzz
@@ -1 +1 @@
-Subproject commit e9847949049cba00658342876a6f8b2f9a7f8860
+Subproject commit 564bf9818a18709776856533829c0c04950773d6