Core: Allow Optional Use of Harfbuzz and FriBiDi #114947

Merged
Harley Acheson merged 3 commits from Harley/blender:OptionalHarfbuzz into main 2023-11-23 23:35:11 +01:00
6 changed files with 146 additions and 0 deletions

View File

@ -419,6 +419,10 @@ option(WITH_MATERIALX "Enable MaterialX Support" ON)
# Hydra render engine
option(WITH_HYDRA "Enable Hydra render engine" ON)
# RTL Languages, Complex Shaping, OpenType Features
option(WITH_FRIBIDI "Enable features relying on fribidi" OFF)
option(WITH_HARFBUZZ "Enable features relying on harfbuzz" OFF)
# 3D format support
# Disable opencollada when we don't have precompiled libs
option(WITH_OPENCOLLADA "Enable OpenCollada Support (http://www.opencollada.org)" ON)

View File

@ -0,0 +1,54 @@
# SPDX-License-Identifier: BSD-3-Clause
# - Find Fribidi library
# Find the native fribidi includes and library
# This module defines
# LIBFRIBIDI_INCLUDE_DIRS, where to find hb.h, Set when
# LIBFRIBIDI_INCLUDE_DIR is found.
# LIBFRIBIDI_LIBRARIES, libraries to link against to use fribidi.
# LIBFRIBIDI_ROOT_DIR, The base directory to search for Fribidi.
# This can also be an environment variable.
# FRIBIDI_FOUND, If false, do not try to use Fribidi.
#
# also defined, but not for general use are
# LIBFRIBIDI_LIBRARY, where to find the Fribidi library.
# If LIBFRIBIDI_ROOT_DIR was defined in the environment, use it.
IF(NOT LIBFRIBIDI_ROOT_DIR AND NOT $ENV{LIBFRIBIDI_ROOT_DIR} STREQUAL "")
SET(LIBFRIBIDI_ROOT_DIR $ENV{LIBFRIBIDI_ROOT_DIR})
ENDIF()
SET(_fribidi_SEARCH_DIRS
${LIBFRIBIDI_ROOT_DIR}
)
FIND_PATH(LIBFRIBIDI_INCLUDE_DIR fribidi/fribidi.h
HINTS
${_fribidi_SEARCH_DIRS}
PATH_SUFFIXES
include
)
FIND_LIBRARY(LIBFRIBIDI_LIBRARY
NAMES
fribidi
HINTS
${_fribidi_SEARCH_DIRS}
PATH_SUFFIXES
lib64 lib
)
# handle the QUIETLY and REQUIRED arguments and set FRIBIDI_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Fribidi DEFAULT_MSG
LIBFRIBIDI_LIBRARY LIBFRIBIDI_INCLUDE_DIR)
IF(FRIBIDI_FOUND)
SET(LIBFRIBIDI_LIBRARIES ${LIBFRIBIDI_LIBRARY})
SET(LIBFRIBIDI_INCLUDE_DIRS ${LIBFRIBIDI_INCLUDE_DIR})
ENDIF()
MARK_AS_ADVANCED(
LIBFRIBIDI_INCLUDE_DIR
LIBFRIBIDI_LIBRARY
)

View File

@ -0,0 +1,54 @@
# SPDX-License-Identifier: BSD-3-Clause
# - Find Harfbuzz library
# Find the native harfbuzz includes and library
# This module defines
# LIBHARFBUZZ_INCLUDE_DIRS, where to find hb.h, Set when
# LIBHARFBUZZ_INCLUDE_DIR is found.
# LIBHARFBUZZ_LIBRARIES, libraries to link against to use harfbuzz.
# LIBHARFBUZZ_ROOT_DIR, The base directory to search for Harfbuzz.
# This can also be an environment variable.
# HARFBUZZ_FOUND, If false, do not try to use Harfbuzz.
#
# also defined, but not for general use are
# LIBHARFBUZZ_LIBRARY, where to find the Harfbuzz library.
# If LIBHARFBUZZ_ROOT_DIR was defined in the environment, use it.
IF(NOT LIBHARFBUZZ_ROOT_DIR AND NOT $ENV{LIBHARFBUZZ_ROOT_DIR} STREQUAL "")
SET(LIBHARFBUZZ_ROOT_DIR $ENV{LIBHARFBUZZ_ROOT_DIR})
ENDIF()
SET(_harfbuzz_SEARCH_DIRS
${LIBHARFBUZZ_ROOT_DIR}
)
FIND_PATH(LIBHARFBUZZ_INCLUDE_DIR harfbuzz/hb.h
HINTS
${_harfbuzz_SEARCH_DIRS}
PATH_SUFFIXES
include
)
FIND_LIBRARY(LIBHARFBUZZ_LIBRARY
NAMES
harfbuzz
HINTS
${_harfbuzz_SEARCH_DIRS}
PATH_SUFFIXES
lib64 lib
)
# handle the QUIETLY and REQUIRED arguments and set HARFBUZZ_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Harfbuzz DEFAULT_MSG
LIBHARFBUZZ_LIBRARY LIBHARFBUZZ_INCLUDE_DIR)
IF(HARFBUZZ_FOUND)
SET(LIBHARFBUZZ_LIBRARIES ${LIBHARFBUZZ_LIBRARY})
SET(LIBHARFBUZZ_INCLUDE_DIRS ${LIBHARFBUZZ_INCLUDE_DIR})
ENDIF()
MARK_AS_ADVANCED(
LIBHARFBUZZ_INCLUDE_DIR
LIBHARFBUZZ_LIBRARY
)

View File

@ -146,6 +146,14 @@ set(BROTLI_LIBRARIES
${LIBDIR}/brotli/lib/libbrotlidec-static.a
)
if(WITH_HARFBUZZ)
find_package(Harfbuzz)
endif()
if(WITH_FRIBIDI)
find_package(Fribidi)
endif()
if(WITH_IMAGE_OPENEXR)
find_package(OpenEXR)
endif()

View File

@ -173,6 +173,14 @@ if(NOT WITH_SYSTEM_FREETYPE)
check_freetype_for_brotli()
endif()
if(WITH_HARFBUZZ)
find_package(Harfbuzz)
endif()
if(WITH_FRIBIDI)
find_package(Fribidi)
endif()
if(WITH_PYTHON)
# This could be used, see: D14954 for details.
# `find_package(PythonLibs)`

View File

@ -374,6 +374,24 @@ set(BROTLI_LIBRARIES
windows_find_package(Freetype REQUIRED)
if(WITH_HARFBUZZ)
windows_find_package(Harfbuzz)
if(NOT Harfbuzz_FOUND)
set(LIBHARFBUZZ_INCLUDE_DIRS ${LIBDIR}/harfbuzz/include)
set(LIBHARFBUZZ_LIBRARIES optimized ${LIBDIR}/harfbuzz/lib/libharfbuzz.lib debug ${LIBDIR}/harfbuzz/lib/libharfbuzz_d.lib)
set(Harfbuzz_FOUND ON)
endif()
endif()
if(WITH_FRIBIDI)
windows_find_package(Fribidi)
if(NOT Fribidi_FOUND)
set(LIBFRIBIDI_INCLUDE_DIRS ${LIBDIR}/fribidi/include)
set(LIBFRIBIDI_LIBRARIES ${LIBDIR}/fribidi/lib/libfribidi.lib)
set(Fribidi_FOUND ON)
endif()
endif()
if(WITH_FFTW3)
set(FFTW3 ${LIBDIR}/fftw3)
if(EXISTS ${FFTW3}/lib/libfftw3-3.lib) # 3.6 libraries