Core: Allow Optional Use of Harfbuzz and FriBiDi

Harfbuzz and FriBiDi are included in our external libraries for all
platforms. This PR adds the glue to make them available as optional
build components (off by default).

Pull Request: https://projects.blender.org/blender/blender/pulls/114947
This commit is contained in:
Harley Acheson 2023-11-23 23:35:03 +01:00 committed by Harley Acheson
parent 694104f8aa
commit 6ae5e1ade8
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