diff --git a/cmake/modules/FindHarfBuzz.cmake b/cmake/modules/FindHarfBuzz.cmake new file mode 100644 index 0000000000..ae1d56acda --- /dev/null +++ b/cmake/modules/FindHarfBuzz.cmake @@ -0,0 +1,29 @@ +# Filename: FindHarfBuzz.cmake +# Authors: CFSworks (2 Nov, 2018) +# +# Usage: +# find_package(HarfBuzz [REQUIRED] [QUIET]) +# +# Once done this will define: +# HARFBUZZ_FOUND - system has HarfBuzz +# HARFBUZZ_INCLUDE_DIR - the include directory containing hb.h +# HARFBUZZ_LIBRARY - the path to the HarfBuzz library +# + +if(NOT HARFBUZZ_INCLUDE_DIR) + find_path(HARFBUZZ_INCLUDE_DIR + NAMES "hb.h" + PATH_SUFFIXES "harfbuzz") + + mark_as_advanced(HARFBUZZ_INCLUDE_DIR) +endif() + +if(NOT HARFBUZZ_LIBRARY) + find_library(HARFBUZZ_LIBRARY + NAMES "harfbuzz") + + mark_as_advanced(HARFBUZZ_LIBRARY) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(HarfBuzz DEFAULT_MSG HARFBUZZ_INCLUDE_DIR HARFBUZZ_LIBRARY) diff --git a/dtool/Package.cmake b/dtool/Package.cmake index 65bec54b4e..e3dc9c2da4 100644 --- a/dtool/Package.cmake +++ b/dtool/Package.cmake @@ -308,12 +308,24 @@ endif() find_package(Freetype QUIET) package_option(FREETYPE - "This enables support for the FreeType font-rendering library. If disabled, + "This enables support for the FreeType font-rendering library. If disabled, Panda3D will only be able to read fonts specially made with egg-mkfont." IMPORTED_AS freetype) config_package(FREETYPE "FreeType") +# HarfBuzz + +# Some versions of harfbuzz-config.cmake contain an endless while loop, so we +# force MODULE mode here. +find_package(HarfBuzz MODULE QUIET) + +package_option(HARFBUZZ + "This enables support for the HarfBuzz text shaping library." + IMPORTED_AS harfbuzz::harfbuzz) + +config_package(HARFBUZZ "HarfBuzz") + # GTK2 # Find and configure GTK diff --git a/dtool/dtool_config.h.in b/dtool/dtool_config.h.in index 30b95773d9..27d264dabb 100644 --- a/dtool/dtool_config.h.in +++ b/dtool/dtool_config.h.in @@ -21,6 +21,9 @@ /* Define if we have Freetype 2.0 or better available. */ #cmakedefine HAVE_FREETYPE +/* Define if we have HarfBuzz available. */ +#cmakedefine HAVE_HARFBUZZ + /* Define if we want to compile in a default font. */ #cmakedefine COMPILE_IN_DEFAULT_FONT diff --git a/panda/src/text/CMakeLists.txt b/panda/src/text/CMakeLists.txt index 4d9f9fe220..3b02c62ae7 100644 --- a/panda/src/text/CMakeLists.txt +++ b/panda/src/text/CMakeLists.txt @@ -36,7 +36,8 @@ set(P3TEXT_SOURCES composite_sources(p3text P3TEXT_SOURCES) add_component_library(p3text SYMBOL BUILDING_PANDA_TEXT ${P3TEXT_HEADERS} ${P3TEXT_SOURCES}) -target_link_libraries(p3text p3parametrics) +target_link_libraries(p3text p3parametrics + PKG::HARFBUZZ) if(HAVE_FREETYPE) target_link_libraries(p3text p3pnmtext) endif()