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

Commit 58ecfb8

Browse files
Olga MikhaltsovaDmitry Cherepanov
authored andcommitted
8250894: Provide a configure option to build and run against the platform libharfbuzz
Reviewed-by: dcherepanov Backport-of: 84e397b
1 parent b522540 commit 58ecfb8

File tree

5 files changed

+127
-63
lines changed

5 files changed

+127
-63
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
@@ -855,6 +855,10 @@ USE_EXTERNAL_LCMS:=@USE_EXTERNAL_LCMS@
855855
LCMS_CFLAGS:=@LCMS_CFLAGS@
856856
LCMS_LIBS:=@LCMS_LIBS@
857857

858+
USE_EXTERNAL_HARFBUZZ:=@USE_EXTERNAL_HARFBUZZ@
859+
HARFBUZZ_CFLAGS:=@HARFBUZZ_CFLAGS@
860+
HARFBUZZ_LIBS:=@HARFBUZZ_LIBS@
861+
858862
USE_EXTERNAL_LIBPNG:=@USE_EXTERNAL_LIBPNG@
859863
PNG_LIBS:=@PNG_LIBS@
860864
PNG_CFLAGS:=@PNG_CFLAGS@

make/copy/Copy-java.desktop.gmk

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

76+
ifeq ($(USE_EXTERNAL_HARFBUZZ), true)
77+
LEGAL_EXCLUDES += harfbuzz.md
78+
endif
79+
7680
$(eval $(call SetupCopyLegalFiles, COPY_LEGAL, \
7781
EXCLUDES := $(LEGAL_EXCLUDES), \
7882
))

make/lib/Awt2dLibraries.gmk

Lines changed: 72 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -537,84 +537,89 @@ endif
537537

538538
###########################################################################
539539

540-
HARFBUZZ_CFLAGS := -DHAVE_OT -DHAVE_FALLBACK -DHAVE_UCDN -DHAVE_ROUND
540+
ifeq ($(USE_EXTERNAL_HARFBUZZ), true)
541+
LIBHARFBUZZ_LIBS := $(HARFBUZZ_LIBS)
542+
else
543+
HARFBUZZ_CFLAGS := -DHAVE_OT -DHAVE_FALLBACK -DHAVE_UCDN -DHAVE_ROUND
541544

542-
# This is better than adding EXPORT_ALL_SYMBOLS
543-
ifneq ($(filter $(TOOLCHAIN_TYPE), gcc clang), )
544-
HARFBUZZ_CFLAGS += -DHB_EXTERN=__attribute__\(\(visibility\(\"default\"\)\)\)
545-
else ifeq ($(TOOLCHAIN_TYPE), microsoft)
546-
HARFBUZZ_CFLAGS += -DHB_EXTERN=__declspec\(dllexport\)
547-
endif
545+
# This is better than adding EXPORT_ALL_SYMBOLS
546+
ifneq ($(filter $(TOOLCHAIN_TYPE), gcc clang), )
547+
HARFBUZZ_CFLAGS += -DHB_EXTERN=__attribute__\(\(visibility\(\"default\"\)\)\)
548+
else ifeq ($(TOOLCHAIN_TYPE), microsoft)
549+
HARFBUZZ_CFLAGS += -DHB_EXTERN=__declspec\(dllexport\)
550+
endif
548551

549-
ifeq ($(call isTargetOs, windows), false)
550-
HARFBUZZ_CFLAGS += -DGETPAGESIZE -DHAVE_MPROTECT -DHAVE_PTHREAD \
552+
ifeq ($(call isTargetOs, windows), false)
553+
HARFBUZZ_CFLAGS += -DGETPAGESIZE -DHAVE_MPROTECT -DHAVE_PTHREAD \
551554
-DHAVE_SYSCONF -DHAVE_SYS_MMAN_H -DHAVE_UNISTD_H \
552555
-DHB_NO_PRAGMA_GCC_DIAGNOSTIC
553-
endif
554-
ifeq ($(call isTargetOs, linux macosx), true)
555-
HARFBUZZ_CFLAGS += -DHAVE_INTEL_ATOMIC_PRIMITIVES
556-
endif
557-
ifeq ($(call isTargetOs, solaris), true)
558-
HARFBUZZ_CFLAGS += -DHAVE_SOLARIS_ATOMIC_OPS
559-
endif
560-
ifeq ($(call isTargetOs, macosx), true)
561-
HARFBUZZ_CFLAGS += -DHAVE_CORETEXT
562-
endif
563-
ifeq ($(call isTargetOs, macosx), false)
564-
LIBHARFBUZZ_EXCLUDE_FILES += harfbuzz/hb-coretext.cc
565-
endif
566-
# hb-ft.cc is not presently needed, and requires freetype 2.4.2 or later.
567-
LIBHARFBUZZ_EXCLUDE_FILES += harfbuzz/hb-ft.cc
556+
endif
557+
ifeq ($(call isTargetOs, solaris), true)
558+
HARFBUZZ_CFLAGS += -DHAVE_SOLARIS_ATOMIC_OPS
559+
endif
560+
ifeq ($(call isTargetOs, linux macosx), true)
561+
HARFBUZZ_CFLAGS += -DHAVE_INTEL_ATOMIC_PRIMITIVES
562+
endif
563+
ifeq ($(call isTargetOs, macosx), true)
564+
HARFBUZZ_CFLAGS += -DHAVE_CORETEXT
565+
endif
566+
ifeq ($(call isTargetOs, macosx), false)
567+
LIBHARFBUZZ_EXCLUDE_FILES += harfbuzz/hb-coretext.cc
568+
endif
569+
# hb-ft.cc is not presently needed, and requires freetype 2.4.2 or later.
570+
LIBHARFBUZZ_EXCLUDE_FILES += harfbuzz/hb-ft.cc
568571

569-
LIBHARFBUZZ_CFLAGS += $(HARFBUZZ_CFLAGS)
572+
LIBHARFBUZZ_CFLAGS += $(HARFBUZZ_CFLAGS)
570573

571-
# For use by libfontmanager:
572-
ifeq ($(call isTargetOs, windows), true)
573-
LIBHARFBUZZ_LIBS := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libharfbuzz/harfbuzz.lib
574-
else
575-
LIBHARFBUZZ_LIBS := -lharfbuzz
576-
endif
574+
# For use by libfontmanager:
575+
ifeq ($(call isTargetOs, windows), true)
576+
LIBHARFBUZZ_LIBS := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libharfbuzz/harfbuzz.lib
577+
else
578+
LIBHARFBUZZ_LIBS := -lharfbuzz
579+
endif
577580

578-
LIBHARFBUZZ_EXTRA_HEADER_DIRS := \
581+
LIBHARFBUZZ_EXTRA_HEADER_DIRS := \
579582
libharfbuzz/hb-ucdn \
580583
#
581584

582-
LIBHARFBUZZ_OPTIMIZATION := HIGH
583-
584-
LIBHARFBUZZ_CFLAGS += $(X_CFLAGS) -DLE_STANDALONE -DHEADLESS
585-
586-
$(eval $(call SetupJdkLibrary, BUILD_LIBHARFBUZZ, \
587-
NAME := harfbuzz, \
588-
EXCLUDE_FILES := $(LIBHARFBUZZ_EXCLUDE_FILES), \
589-
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
590-
CFLAGS := $(CFLAGS_JDKLIB) $(LIBHARFBUZZ_CFLAGS), \
591-
CXXFLAGS := $(CXXFLAGS_JDKLIB) $(LIBHARFBUZZ_CFLAGS), \
592-
OPTIMIZATION := $(LIBHARFBUZZ_OPTIMIZATION), \
593-
CFLAGS_windows = -DCC_NOEX, \
594-
EXTRA_HEADER_DIRS := $(LIBHARFBUZZ_EXTRA_HEADER_DIRS), \
595-
WARNINGS_AS_ERRORS_xlc := false, \
596-
DISABLED_WARNINGS_gcc := type-limits missing-field-initializers strict-aliasing, \
597-
DISABLED_WARNINGS_CXX_gcc := reorder delete-non-virtual-dtor strict-overflow \
585+
LIBHARFBUZZ_OPTIMIZATION := HIGH
586+
587+
LIBHARFBUZZ_CFLAGS += $(X_CFLAGS) -DLE_STANDALONE -DHEADLESS
588+
589+
$(eval $(call SetupJdkLibrary, BUILD_LIBHARFBUZZ, \
590+
NAME := harfbuzz, \
591+
EXCLUDE_FILES := $(LIBHARFBUZZ_EXCLUDE_FILES), \
592+
TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
593+
CFLAGS := $(CFLAGS_JDKLIB) $(LIBHARFBUZZ_CFLAGS), \
594+
CXXFLAGS := $(CXXFLAGS_JDKLIB) $(LIBHARFBUZZ_CFLAGS), \
595+
OPTIMIZATION := $(LIBHARFBUZZ_OPTIMIZATION), \
596+
CFLAGS_windows = -DCC_NOEX, \
597+
EXTRA_HEADER_DIRS := $(LIBHARFBUZZ_EXTRA_HEADER_DIRS), \
598+
WARNINGS_AS_ERRORS_xlc := false, \
599+
DISABLED_WARNINGS_gcc := type-limits missing-field-initializers strict-aliasing, \
600+
DISABLED_WARNINGS_CXX_gcc := reorder delete-non-virtual-dtor strict-overflow \
598601
maybe-uninitialized class-memaccess, \
599-
DISABLED_WARNINGS_clang := unused-value incompatible-pointer-types \
602+
DISABLED_WARNINGS_clang := unused-value incompatible-pointer-types \
600603
tautological-constant-out-of-range-compare int-to-pointer-cast \
601604
undef missing-field-initializers, \
602-
DISABLED_WARNINGS_microsoft := 4267 4244 4090 4146 4334 4819 4101 4068 4805 4138, \
603-
LDFLAGS := $(LDFLAGS_JDKLIB) \
605+
DISABLED_WARNINGS_microsoft := 4267 4244 4090 4146 4334 4819 4101 4068 4805 4138, \
606+
LDFLAGS := $(LDFLAGS_JDKLIB) \
604607
$(call SET_SHARED_LIBRARY_ORIGIN), \
605-
LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
606-
LDFLAGS_aix := -Wl$(COMMA)-berok, \
607-
LIBS := $(BUILD_LIBHARFBUZZ), \
608-
LIBS_unix := $(LIBM) $(LIBCXX), \
609-
LIBS_macosx := -framework CoreText -framework CoreFoundation -framework CoreGraphics, \
610-
LIBS_windows := user32.lib, \
611-
))
608+
LDFLAGS_unix := -L$(INSTALL_LIBRARIES_HERE), \
609+
LDFLAGS_aix := -Wl$(COMMA)-berok, \
610+
LIBS := $(BUILD_LIBHARFBUZZ), \
611+
LIBS_unix := $(LIBM) $(LIBCXX), \
612+
LIBS_macosx := -framework CoreText -framework CoreFoundation -framework CoreGraphics, \
613+
LIBS_windows := user32.lib, \
614+
))
612615

613-
ifeq ($(FREETYPE_TO_USE), bundled)
614-
$(BUILD_LIBHARFBUZZ): $(BUILD_LIBFREETYPE)
615-
endif
616+
ifeq ($(FREETYPE_TO_USE), bundled)
617+
$(BUILD_LIBHARFBUZZ): $(BUILD_LIBFREETYPE)
618+
endif
619+
620+
TARGETS += $(BUILD_LIBHARFBUZZ)
616621

617-
TARGETS += $(BUILD_LIBHARFBUZZ)
622+
endif
618623

619624
###########################################################################
620625

@@ -691,7 +696,11 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBFONTMANAGER, \
691696
$(WIN_AWT_LIB), \
692697
))
693698

694-
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT) $(BUILD_LIBHARFBUZZ)
699+
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBAWT)
700+
701+
ifeq ($(USE_EXTERNAL_HARFBUZZ), false)
702+
$(BUILD_LIBFONTMANAGER): $(BUILD_LIBHARFBUZZ)
703+
endif
695704

696705
ifeq ($(call isTargetOs, macosx), true)
697706
$(BUILD_LIBFONTMANAGER): $(call FindLib, $(MODULE), awt_lwawt)

0 commit comments

Comments
 (0)