8349925: [REDO] Support static JDK in libfontmanager/freetypeScaler.c

Reviewed-by: prr
This commit is contained in:
Jiangli Zhou 2025-02-13 15:44:46 +00:00
parent c2fc947826
commit 18958c6298
2 changed files with 18 additions and 1 deletions

View File

@ -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 := \

View File

@ -32,6 +32,7 @@
#include <stdlib.h>
#if !defined(_WIN32) && !defined(__APPLE_)
#include <dlfcn.h>
#include "jvm.h"
#endif
#include <math.h>
#include "ft2build.h"
@ -298,6 +299,21 @@ static void setInterpreterVersion(FT_Library library) {
#if defined(_WIN32) || defined(__APPLE__)
FT_Property_Set(library, module, property, (void*)(&version));
#else
FT_Prop_Set_Func func = NULL;
if (JVM_IsStaticallyLinked()) {
// The bundled libfreetype may be statically linked with
// the launcher.
func = (FT_Prop_Set_Func)dlsym(RTLD_DEFAULT, "FT_Property_Set");
if (func != NULL) {
func(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);
@ -305,7 +321,7 @@ static void setInterpreterVersion(FT_Library library) {
return;
}
}
FT_Prop_Set_Func func = (FT_Prop_Set_Func)dlsym(lib, "FT_Property_Set");
func = (FT_Prop_Set_Func)dlsym(lib, "FT_Property_Set");
if (func != NULL) {
func(library, module, property, (void*)(&version));
}