Add FindWrapHarfbuzz

Apparently we didn't have a wrap find module for it before. Add one,
and add special support to handle a Gentoo broken Config file which is
exported by an autotools build of harbuzz.

Change-Id: I83cbeb817caf2610104c16713d4eac6ab6f8c63b
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Qt CMake Build Bot
This commit is contained in:
Alexandru Croitor 2019-11-20 17:28:15 +01:00
parent 96d6e2276d
commit 8d35ad8726
3 changed files with 47 additions and 2 deletions

View File

@ -0,0 +1,45 @@
# We can't create the same interface imported target multiple times, CMake will complain if we do
# that. This can happen if the find_package call is done in multiple different subdirectories.
if(TARGET WrapHarfbuzz::WrapHarfbuzz)
set(WrapHarfbuzz_FOUND ON)
return()
endif()
set(WrapHarfbuzz_FOUND OFF)
find_package(harfbuzz)
# Gentoo has some buggy version of a harfbuzz Config file. Check if include paths are valid.
set(__harfbuzz_target_name "harfbuzz::harfbuzz")
if(harfbuzz_FOUND AND TARGET "${__harfbuzz_target_name}")
get_property(__harfbuzz_include_paths TARGET "${__harfbuzz_target_name}"
PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
foreach(__harfbuzz_include_dir ${__harfbuzz_include_paths})
if(NOT EXISTS "${__harfbuzz_include_dir}")
# Must be the broken Gentoo harfbuzzConfig.cmake file. Try to use pkg-config instead.
set(__harfbuzz_broken_config_file TRUE)
break()
endif()
endforeach()
endif()
if(__harfbuzz_broken_config_file)
find_package(PkgConfig)
pkg_check_modules(harfbuzz harfbuzz IMPORTED_TARGET)
set(__harfbuzz_target_name "PkgConfig::harfbuzz")
if (NOT TARGET "${__harfbuzz_target_name}")
set(harfbuzz_FOUND 0)
endif()
endif()
if(TARGET "${__harfbuzz_target_name}")
set(WrapHarfbuzz_FOUND ON)
add_library(WrapHarfbuzz::WrapHarfbuzz INTERFACE IMPORTED)
target_link_libraries(WrapHarfbuzz::WrapHarfbuzz INTERFACE ${__harfbuzz_target_name})
endif()
unset(__harfbuzz_target_name)
unset(__harfbuzz_include_dir)
unset(__harfbuzz_broken_config_file)

View File

@ -30,7 +30,7 @@ qt_find_package(WrapFreetype PROVIDED_TARGETS WrapFreetype::WrapFreetype)
set_package_properties(WrapFreetype PROPERTIES TYPE REQUIRED)
qt_find_package(Fontconfig PROVIDED_TARGETS Fontconfig::Fontconfig)
qt_find_package(gbm PROVIDED_TARGETS gbm::gbm)
qt_find_package(harfbuzz PROVIDED_TARGETS harfbuzz::harfbuzz)
qt_find_package(WrapHarfbuzz PROVIDED_TARGETS WrapHarfbuzz::WrapHarfbuzz)
qt_find_package(Libinput PROVIDED_TARGETS Libinput::Libinput)
qt_find_package(JPEG PROVIDED_TARGETS JPEG::JPEG)
qt_find_package(PNG PROVIDED_TARGETS PNG::PNG)

View File

@ -384,7 +384,7 @@ _library_map = [
LibraryMapping("gnu_iconv", None, None),
LibraryMapping("gtk3", "GTK3", "PkgConfig::GTK3"),
LibraryMapping("gssapi", "GSSAPI", "GSSAPI::GSSAPI"),
LibraryMapping("harfbuzz", "harfbuzz", "harfbuzz::harfbuzz"),
LibraryMapping("harfbuzz", "WrapHarfbuzz", "WrapHarfbuzz::WrapHarfbuzz"),
LibraryMapping("host_dbus", None, None),
LibraryMapping(
"icu", "ICU", "ICU::i18n ICU::uc ICU::data", extra=["COMPONENTS", "i18n", "uc", "data"]