From 0e30fc507edc80d75c0527f6b324e2c24333e013 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Mon, 5 Jun 2023 03:45:33 +0200
Subject: [PATCH] cmake: version symbols using version script
---
Android.mk | 2 +
CMakeLists.txt | 2 +
SDL_ttf.sym | 92 +++++++++++++++++++++++++++++++++
cmake/PrivateSdlFunctions.cmake | 11 ++++
4 files changed, 107 insertions(+)
create mode 100644 SDL_ttf.sym
diff --git a/Android.mk b/Android.mk
index 09a27894..82642817 100644
--- a/Android.mk
+++ b/Android.mk
@@ -29,6 +29,8 @@ LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
LOCAL_CFLAGS += -O2
+LOCAL_LDFLAGS := -Wl,--no-undefined -Wl,--version-script=$(LOCAL_PATH)/SDL_ttf.sym
+
ifneq ($(FREETYPE_LIBRARY_PATH),)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(FREETYPE_LIBRARY_PATH)/include
LOCAL_STATIC_LIBRARIES += freetype
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 38f130da..77f29ae9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -175,6 +175,8 @@ if(SDL3TTF_BUILD_SHARED_LIBS)
sdl_target_link_options_no_undefined(${sdl3_ttf_target_name})
endif()
+sdl_target_link_option_version_file(${sdl3_ttf_target_name} "${CMAKE_CURRENT_SOURCE_DIR}/SDL_ttf.sym")
+
if(SDL3TTF_BUILD_SHARED_LIBS)
# Make sure static library dependencies are built with -fPIC when building a shared SDL3_ttf
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
diff --git a/SDL_ttf.sym b/SDL_ttf.sym
new file mode 100644
index 00000000..91f74aa4
--- /dev/null
+++ b/SDL_ttf.sym
@@ -0,0 +1,92 @@
+SDL3_mixer_0.0.0 {
+ global:
+ TTF_ByteSwappedUNICODE;
+ TTF_CloseFont;
+ TTF_FontAscent;
+ TTF_FontDescent;
+ TTF_FontFaceFamilyName;
+ TTF_FontFaceIsFixedWidth;
+ TTF_FontFaceStyleName;
+ TTF_FontFaces;
+ TTF_FontHeight;
+ TTF_FontLineSkip;
+ TTF_GetFontHinting;
+ TTF_GetFontKerning;
+ TTF_GetFontKerningSize;
+ TTF_GetFontKerningSizeGlyphs;
+ TTF_GetFontKerningSizeGlyphs32;
+ TTF_GetFontOutline;
+ TTF_GetFontSDF;
+ TTF_GetFontStyle;
+ TTF_GetFontWrappedAlign;
+ TTF_GetFreeTypeVersion;
+ TTF_GetHarfBuzzVersion;
+ TTF_GlyphIsProvided;
+ TTF_GlyphIsProvided32;
+ TTF_GlyphMetrics;
+ TTF_GlyphMetrics32;
+ TTF_Init;
+ TTF_IsFontScalable;
+ TTF_Linked_Version;
+ TTF_MeasureText;
+ TTF_MeasureUNICODE;
+ TTF_MeasureUTF8;
+ TTF_OpenFont;
+ TTF_OpenFontDPI;
+ TTF_OpenFontDPIRW;
+ TTF_OpenFontIndex;
+ TTF_OpenFontIndexDPI;
+ TTF_OpenFontIndexDPIRW;
+ TTF_OpenFontIndexRW;
+ TTF_OpenFontRW;
+ TTF_Quit;
+ TTF_RenderGlyph32_Blended;
+ TTF_RenderGlyph32_LCD;
+ TTF_RenderGlyph32_Shaded;
+ TTF_RenderGlyph32_Solid;
+ TTF_RenderGlyph_Blended;
+ TTF_RenderGlyph_LCD;
+ TTF_RenderGlyph_Shaded;
+ TTF_RenderGlyph_Solid;
+ TTF_RenderText_Blended;
+ TTF_RenderText_Blended_Wrapped;
+ TTF_RenderText_LCD;
+ TTF_RenderText_LCD_Wrapped;
+ TTF_RenderText_Shaded;
+ TTF_RenderText_Shaded_Wrapped;
+ TTF_RenderText_Solid;
+ TTF_RenderText_Solid_Wrapped;
+ TTF_RenderUNICODE_Blended;
+ TTF_RenderUNICODE_Blended_Wrapped;
+ TTF_RenderUNICODE_LCD;
+ TTF_RenderUNICODE_LCD_Wrapped;
+ TTF_RenderUNICODE_Shaded;
+ TTF_RenderUNICODE_Shaded_Wrapped;
+ TTF_RenderUNICODE_Solid;
+ TTF_RenderUNICODE_Solid_Wrapped;
+ TTF_RenderUTF8_Blended;
+ TTF_RenderUTF8_Blended_Wrapped;
+ TTF_RenderUTF8_LCD;
+ TTF_RenderUTF8_LCD_Wrapped;
+ TTF_RenderUTF8_Shaded;
+ TTF_RenderUTF8_Shaded_Wrapped;
+ TTF_RenderUTF8_Solid;
+ TTF_RenderUTF8_Solid_Wrapped;
+ TTF_SetDirection;
+ TTF_SetFontDirection;
+ TTF_SetFontHinting;
+ TTF_SetFontKerning;
+ TTF_SetFontOutline;
+ TTF_SetFontSDF;
+ TTF_SetFontScriptName;
+ TTF_SetFontSize;
+ TTF_SetFontSizeDPI;
+ TTF_SetFontStyle;
+ TTF_SetFontWrappedAlign;
+ TTF_SetScript;
+ TTF_SizeText;
+ TTF_SizeUNICODE;
+ TTF_SizeUTF8;
+ TTF_WasInit;
+ local: *;
+};
diff --git a/cmake/PrivateSdlFunctions.cmake b/cmake/PrivateSdlFunctions.cmake
index 0f11b245..034f2cef 100644
--- a/cmake/PrivateSdlFunctions.cmake
+++ b/cmake/PrivateSdlFunctions.cmake
@@ -226,3 +226,14 @@ function(sdl_target_link_options_no_undefined TARGET)
endif()
endif()
endfunction()
+
+function(sdl_target_link_option_version_file TARGET VERSION_SCRIPT)
+ sdl_check_linker_flag("-Wl,--version-script=${VERSION_SCRIPT}" HAVE_WL_VERSION_SCRIPT)
+ if(HAVE_WL_VERSION_SCRIPT)
+ target_link_options(${TARGET} PRIVATE "-Wl,--version-script=${VERSION_SCRIPT}")
+ else()
+ if(LINUX OR ANDROID)
+ message(FATAL_ERROR "Linker does not support '-Wl,--version-script=xxx.sym'. This is required on the current host platform.")
+ endif()
+ endif()
+endfunction()