Skip to content
This repository was archived by the owner on Feb 2, 2023. It is now read-only.

Commit c361e15

Browse files
author
Dmitry Cherepanov
committed
8250894: Provide a configure option to build and run against the platform libharfbuzz
Backport-of: 84e397b4de6495caa8bbd5d5481305f0bf3e9d06
1 parent e6d8cfc commit c361e15

File tree

5 files changed

+124
-60
lines changed

5 files changed

+124
-60
lines changed

make/autoconf/help.m4

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ apt_help() {
101101
PKGHANDLER_COMMAND="sudo apt-get install libfontconfig1-dev" ;;
102102
freetype)
103103
PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;;
104+
harfbuzz)
105+
PKGHANDLER_COMMAND="sudo apt-get install libharfbuzz-dev" ;;
104106
ffi)
105107
PKGHANDLER_COMMAND="sudo apt-get install libffi-dev" ;;
106108
x11)
@@ -124,6 +126,8 @@ zypper_help() {
124126
PKGHANDLER_COMMAND="sudo zypper install fontconfig-devel" ;;
125127
freetype)
126128
PKGHANDLER_COMMAND="sudo zypper install freetype-devel" ;;
129+
harfbuzz)
130+
PKGHANDLER_COMMAND="sudo zypper install harfbuzz-devel" ;;
127131
x11)
128132
PKGHANDLER_COMMAND="sudo zypper install libX11-devel libXext-devel libXrender-devel libXrandr-devel libXtst-devel libXt-devel libXi-devel" ;;
129133
ccache)
@@ -143,6 +147,8 @@ yum_help() {
143147
PKGHANDLER_COMMAND="sudo yum install fontconfig-devel" ;;
144148
freetype)
145149
PKGHANDLER_COMMAND="sudo yum install freetype-devel" ;;
150+
harfbuzz)
151+
PKGHANDLER_COMMAND="sudo yum install harfbuzz-devel" ;;
146152
x11)
147153
PKGHANDLER_COMMAND="sudo yum install libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel" ;;
148154
ccache)

make/autoconf/lib-bundled.m4

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ AC_DEFUN_ONCE([LIB_SETUP_BUNDLED_LIBS],
4040
LIB_SETUP_LIBPNG
4141
LIB_SETUP_ZLIB
4242
LIB_SETUP_LCMS
43+
LIB_SETUP_HARFBUZZ
4344
])
4445

4546
################################################################################
@@ -263,3 +264,43 @@ AC_DEFUN_ONCE([LIB_SETUP_LCMS],
263264
AC_SUBST(LCMS_CFLAGS)
264265
AC_SUBST(LCMS_LIBS)
265266
])
267+
268+
################################################################################
269+
# Setup harfbuzz
270+
################################################################################
271+
AC_DEFUN_ONCE([LIB_SETUP_HARFBUZZ],
272+
[
273+
AC_ARG_WITH(harfbuzz, [AS_HELP_STRING([--with-harfbuzz],
274+
[use harfbuzz from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])])
275+
276+
AC_MSG_CHECKING([for which harfbuzz to use])
277+
278+
DEFAULT_HARFBUZZ=bundled
279+
# If user didn't specify, use DEFAULT_HARFBUZZ
280+
if test "x${with_harfbuzz}" = "x"; then
281+
with_harfbuzz=${DEFAULT_HARFBUZZ}
282+
fi
283+
284+
if test "x${with_harfbuzz}" = "xbundled"; then
285+
USE_EXTERNAL_HARFBUZZ=false
286+
HARFBUZZ_CFLAGS=""
287+
HARFBUZZ_LIBS=""
288+
AC_MSG_RESULT([bundled])
289+
elif test "x${with_harfbuzz}" = "xsystem"; then
290+
AC_MSG_RESULT([system])
291+
PKG_CHECK_MODULES([HARFBUZZ], [harfbuzz], [HARFBUZZ_FOUND=yes], [HARFBUZZ_FOUND=no])
292+
if test "x${HARFBUZZ_FOUND}" = "xyes"; then
293+
# PKG_CHECK_MODULES will set HARFBUZZ_CFLAGS and HARFBUZZ_LIBS
294+
USE_EXTERNAL_HARFBUZZ=true
295+
else
296+
HELP_MSG_MISSING_DEPENDENCY([harfbuzz])
297+
AC_MSG_ERROR([--with-harfbuzz=system specified, but no harfbuzz found! $HELP_MSG])
298+
fi
299+
else
300+
AC_MSG_ERROR([Invalid value for --with-harfbuzz: ${with_harfbuzz}, use 'system' or 'bundled'])
301+
fi
302+
303+
AC_SUBST(USE_EXTERNAL_HARFBUZZ)
304+
AC_SUBST(HARFBUZZ_CFLAGS)
305+
AC_SUBST(HARFBUZZ_LIBS)
306+
])

make/autoconf/spec.gmk.in

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,10 @@ USE_EXTERNAL_LCMS:=@USE_EXTERNAL_LCMS@
832832
LCMS_CFLAGS:=@LCMS_CFLAGS@
833833
LCMS_LIBS:=@LCMS_LIBS@
834834

835+
USE_EXTERNAL_HARFBUZZ:=@USE_EXTERNAL_HARFBUZZ@
836+
HARFBUZZ_CFLAGS:=@HARFBUZZ_CFLAGS@
837+
HARFBUZZ_LIBS:=@HARFBUZZ_LIBS@
838+
835839
USE_EXTERNAL_LIBPNG:=@USE_EXTERNAL_LIBPNG@
836840
PNG_LIBS:=@PNG_LIBS@
837841
PNG_CFLAGS:=@PNG_CFLAGS@

make/modules/java.desktop/Copy.gmk

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ ifeq ($(FREETYPE_TO_USE), system)
7171
LEGAL_EXCLUDES += freetype.md
7272
endif
7373

74+
ifeq ($(USE_EXTERNAL_HARFBUZZ), true)
75+
LEGAL_EXCLUDES += harfbuzz.md
76+
endif
77+
7478
$(eval $(call SetupCopyLegalFiles, COPY_LEGAL, \
7579
EXCLUDES := $(LEGAL_EXCLUDES), \
7680
))

make/modules/java.desktop/lib/Awt2dLibraries.gmk

Lines changed: 69 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -434,81 +434,86 @@ endif
434434

435435
###########################################################################
436436

437-
HARFBUZZ_CFLAGS := -DHAVE_OT -DHAVE_FALLBACK -DHAVE_UCDN -DHAVE_ROUND
437+
ifeq ($(USE_EXTERNAL_HARFBUZZ), true)
438+
LIBHARFBUZZ_LIBS := $(HARFBUZZ_LIBS)
439+
else
440+
HARFBUZZ_CFLAGS := -DHAVE_OT -DHAVE_FALLBACK -DHAVE_UCDN -DHAVE_ROUND
438441

439-
# This is better than adding EXPORT_ALL_SYMBOLS
440-
ifneq ($(filter $(TOOLCHAIN_TYPE), gcc clang), )
441-
HARFBUZZ_CFLAGS += -DHB_EXTERN=__attribute__\(\(visibility\(\"default\"\)\)\)
442-
else ifeq ($(TOOLCHAIN_TYPE), microsoft)
443-
HARFBUZZ_CFLAGS += -DHB_EXTERN=__declspec\(dllexport\)
444-
endif
442+
# This is better than adding EXPORT_ALL_SYMBOLS
443+
ifneq ($(filter $(TOOLCHAIN_TYPE), gcc clang), )
444+
HARFBUZZ_CFLAGS += -DHB_EXTERN=__attribute__\(\(visibility\(\"default\"\)\)\)
445+
else ifeq ($(TOOLCHAIN_TYPE), microsoft)
446+
HARFBUZZ_CFLAGS += -DHB_EXTERN=__declspec\(dllexport\)
447+
endif
445448

446-
ifeq ($(call isTargetOs, windows), false)
447-
HARFBUZZ_CFLAGS += -DGETPAGESIZE -DHAVE_MPROTECT -DHAVE_PTHREAD \
449+
ifeq ($(call isTargetOs, windows), false)
450+
HARFBUZZ_CFLAGS += -DGETPAGESIZE -DHAVE_MPROTECT -DHAVE_PTHREAD \
448451
-DHAVE_SYSCONF -DHAVE_SYS_MMAN_H -DHAVE_UNISTD_H \
449452
-DHB_NO_PRAGMA_GCC_DIAGNOSTIC
450-
endif
451-
ifeq ($(call isTargetOs, linux macosx), true)
452-
HARFBUZZ_CFLAGS += -DHAVE_INTEL_ATOMIC_PRIMITIVES
453-
endif
454-
ifeq ($(call isTargetOs, macosx), true)
455-
HARFBUZZ_CFLAGS += -DHAVE_CORETEXT
456-
endif
457-
ifeq ($(call isTargetOs, macosx), false)
458-
LIBHARFBUZZ_EXCLUDE_FILES += harfbuzz/hb-coretext.cc
459-
endif
460-
# hb-ft.cc is not presently needed, and requires freetype 2.4.2 or later.
461-
LIBHARFBUZZ_EXCLUDE_FILES += harfbuzz/hb-ft.cc
453+
endif
454+
ifeq ($(call isTargetOs, linux macosx), true)
455+
HARFBUZZ_CFLAGS += -DHAVE_INTEL_ATOMIC_PRIMITIVES
456+
endif
457+
ifeq ($(call isTargetOs, macosx), true)
458+
HARFBUZZ_CFLAGS += -DHAVE_CORETEXT
459+
endif
460+
ifeq ($(call isTargetOs, macosx), false)
461+
LIBHARFBUZZ_EXCLUDE_FILES += harfbuzz/hb-coretext.cc
462+
endif
463+
# hb-ft.cc is not presently needed, and requires freetype 2.4.2 or later.
464+
LIBHARFBUZZ_EXCLUDE_FILES += harfbuzz/hb-ft.cc
462465

463-
LIBHARFBUZZ_CFLAGS += $(HARFBUZZ_CFLAGS)
466+
LIBHARFBUZZ_CFLAGS += $(HARFBUZZ_CFLAGS)
464467

465-
# For use by libfontmanager:
466-
ifeq ($(call isTargetOs, windows), true)
467-
LIBHARFBUZZ_LIBS := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libharfbuzz/harfbuzz.lib
468-
else
469-
LIBHARFBUZZ_LIBS := -lharfbuzz
470-
endif
468+
# For use by libfontmanager:
469+
ifeq ($(call isTargetOs, windows), true)
470+
LIBHARFBUZZ_LIBS := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libharfbuzz/harfbuzz.lib
471+
else
472+
LIBHARFBUZZ_LIBS := -lharfbuzz
473+
endif
471474

472-
LIBHARFBUZZ_EXTRA_HEADER_DIRS := \
475+
LIBHARFBUZZ_EXTRA_HEADER_DIRS := \
473476
libharfbuzz/hb-ucdn \
474477
#
475478

476-
LIBHARFBUZZ_OPTIMIZATION := HIGH
477-
478-
LIBHARFBUZZ_CFLAGS += $(X_CFLAGS) -DLE_STANDALONE -DHEADLESS
479-
480-
$(eval $(call SetupJdkLibrary, BUILD_LIBHARFBUZZ, \
481-
NAME := harfbuzz, \
482-
EXCLUDE_FILES := $(LIBHARFBUZZ_EXCLUDE_FILES), \
483-
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
484-
CFLAGS := $(CFLAGS_JDKLIB) $(LIBHARFBUZZ_CFLAGS), \
485-
CXXFLAGS := $(CXXFLAGS_JDKLIB) $(LIBHARFBUZZ_CFLAGS), \
486-
OPTIMIZATION := $(LIBHARFBUZZ_OPTIMIZATION), \
487-
CFLAGS_windows = -DCC_NOEX, \
488-
EXTRA_HEADER_DIRS := $(LIBHARFBUZZ_EXTRA_HEADER_DIRS), \
489-
WARNINGS_AS_ERRORS_xlc := false, \
490-
DISABLED_WARNINGS_gcc := type-limits missing-field-initializers strict-aliasing, \
491-
DISABLED_WARNINGS_CXX_gcc := reorder delete-non-virtual-dtor strict-overflow \
479+
LIBHARFBUZZ_OPTIMIZATION := HIGH
480+
481+
LIBHARFBUZZ_CFLAGS += $(X_CFLAGS) -DLE_STANDALONE -DHEADLESS
482+
483+
$(eval $(call SetupJdkLibrary, BUILD_LIBHARFBUZZ, \
484+
NAME := harfbuzz, \
485+
EXCLUDE_FILES := $(LIBHARFBUZZ_EXCLUDE_FILES), \
486+
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
487+
CFLAGS := $(CFLAGS_JDKLIB) $(LIBHARFBUZZ_CFLAGS), \
488+
CXXFLAGS := $(CXXFLAGS_JDKLIB) $(LIBHARFBUZZ_CFLAGS), \
489+
OPTIMIZATION := $(LIBHARFBUZZ_OPTIMIZATION), \
490+
CFLAGS_windows = -DCC_NOEX, \
491+
EXTRA_HEADER_DIRS := $(LIBHARFBUZZ_EXTRA_HEADER_DIRS), \
492+
WARNINGS_AS_ERRORS_xlc := false, \
493+
DISABLED_WARNINGS_gcc := type-limits missing-field-initializers strict-aliasing, \
494+
DISABLED_WARNINGS_CXX_gcc := reorder delete-non-virtual-dtor strict-overflow \
492495
maybe-uninitialized class-memaccess, \
493-
DISABLED_WARNINGS_clang := unused-value incompatible-pointer-types \
496+
DISABLED_WARNINGS_clang := unused-value incompatible-pointer-types \
494497
tautological-constant-out-of-range-compare int-to-pointer-cast \
495498
undef missing-field-initializers, \
496-
DISABLED_WARNINGS_microsoft := 4267 4244 4090 4146 4334 4819 4101 4068 4805 4138, \
497-
LDFLAGS := $(LDFLAGS_JDKLIB) \
499+
DISABLED_WARNINGS_microsoft := 4267 4244 4090 4146 4334 4819 4101 4068 4805 4138, \
500+
LDFLAGS := $(LDFLAGS_JDKLIB) \
498501
$(call SET_SHARED_LIBRARY_ORIGIN), \
499-
LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
500-
LDFLAGS_aix := -Wl$(COMMA)-berok, \
501-
LIBS := $(BUILD_LIBHARFBUZZ), \
502-
LIBS_unix := $(LIBM) $(LIBCXX), \
503-
LIBS_macosx := -framework CoreText -framework CoreFoundation -framework CoreGraphics, \
504-
LIBS_windows := user32.lib, \
505-
))
502+
LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
503+
LDFLAGS_aix := -Wl$(COMMA)-berok, \
504+
LIBS := $(BUILD_LIBHARFBUZZ), \
505+
LIBS_unix := $(LIBM) $(LIBCXX), \
506+
LIBS_macosx := -framework CoreText -framework CoreFoundation -framework CoreGraphics, \
507+
LIBS_windows := user32.lib, \
508+
))
506509

507-
ifeq ($(FREETYPE_TO_USE), bundled)
508-
$(BUILD_LIBHARFBUZZ): $(BUILD_LIBFREETYPE)
509-
endif
510+
ifeq ($(FREETYPE_TO_USE), bundled)
511+
$(BUILD_LIBHARFBUZZ): $(BUILD_LIBFREETYPE)
512+
endif
510513

511-
TARGETS += $(BUILD_LIBHARFBUZZ)
514+
TARGETS += $(BUILD_LIBHARFBUZZ)
515+
516+
endif
512517

513518
###########################################################################
514519

@@ -578,7 +583,11 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBFONTMANAGER, \
578583
$(WIN_AWT_LIB), \
579584
))
580585

581-
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT) $(BUILD_LIBHARFBUZZ)
586+
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT)
587+
588+
ifeq ($(USE_EXTERNAL_HARFBUZZ), false)
589+
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBHARFBUZZ)
590+
endif
582591

583592
ifeq ($(call isTargetOs, macosx), true)
584593
$(BUILD_LIBFONTMANAGER): $(call FindLib, $(MODULE), awt_lwawt)

0 commit comments

Comments
 (0)