From 332d87cc7e19d55ddb98a43a6eb3a77f3518ecfd Mon Sep 17 00:00:00 2001 From: Jiangli Zhou Date: Wed, 12 Feb 2025 16:29:08 +0000 Subject: [PATCH] 8349859: Support static JDK in libfontmanager/freetypeScaler.c Reviewed-by: prr --- make/modules/java.desktop/lib/ClientLibraries.gmk | 1 + .../share/native/libfontmanager/freetypeScaler.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/make/modules/java.desktop/lib/ClientLibraries.gmk b/make/modules/java.desktop/lib/ClientLibraries.gmk index 8733a8617c9..b6d1abaf268 100644 --- a/make/modules/java.desktop/lib/ClientLibraries.gmk +++ b/make/modules/java.desktop/lib/ClientLibraries.gmk @@ -407,6 +407,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBFONTMANAGER, \ LDFLAGS_aix := -Wl$(COMMA)-berok, \ JDK_LIBS := libawt java.base:libjava $(LIBFONTMANAGER_JDK_LIBS), \ JDK_LIBS_macosx := libawt_lwawt, \ + JDK_LIBS_unix := java.base:libjvm, \ LIBS := $(LIBFONTMANAGER_LIBS), \ LIBS_unix := $(LIBM), \ LIBS_macosx := \ diff --git a/src/java.desktop/share/native/libfontmanager/freetypeScaler.c b/src/java.desktop/share/native/libfontmanager/freetypeScaler.c index 37c6dba2a78..d76b9ea648b 100644 --- a/src/java.desktop/share/native/libfontmanager/freetypeScaler.c +++ b/src/java.desktop/share/native/libfontmanager/freetypeScaler.c @@ -32,6 +32,7 @@ #include #if !defined(_WIN32) && !defined(__APPLE_) #include +#include "jvm.h" #endif #include #include "ft2build.h" @@ -298,6 +299,19 @@ static void setInterpreterVersion(FT_Library library) { #if defined(_WIN32) || defined(__APPLE__) FT_Property_Set(library, module, property, (void*)(&version)); #else + + if (JVM_IsStaticallyLinked()) { + // The bundled libfreetype may be statically linked with + // the launcher. + if (dlsym(RTLD_DEFAULT, "FT_Property_Set") != NULL) { + FT_Property_Set(library, module, property, (void*)(&version)); + return; + } + + // libfreetype is not statically linked with the executable, + // fall through to find the system provided library dynamically. + } + void *lib = dlopen("libfreetype.so", RTLD_LOCAL|RTLD_LAZY); if (lib == NULL) { lib = dlopen("libfreetype.so.6", RTLD_LOCAL|RTLD_LAZY);