summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2019-05-07 20:20:39 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2019-05-08 10:54:15 +0000
commit9d96c8da78125531c64916291e03867e752a97af (patch)
tree99a5b4426268c940e42c71b2b65e1fcb80477020
parente8bb67330164e3ed4baf87b4b0a46d584fe3b738 (diff)
Fix freetype target not being found when using vcpkg
vcpkg and upstream CMake find module define different target names for the same package. To circumvent this, create our own Wrap find module, and link against it. Inside the find module, try both target names. Change-Id: Iba488bce0fb410ddb83f6414244f86ad367de72b Reviewed-by: Liang Qi <liang.qi@qt.io> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
-rw-r--r--cmake/FindWrapFreetype.cmake26
-rw-r--r--src/gui/configure.cmake4
-rw-r--r--src/platformsupport/fontdatabases/CMakeLists.txt4
-rw-r--r--src/plugins/platforms/minimal/CMakeLists.txt4
-rw-r--r--src/plugins/platforms/xcb/CMakeLists.txt4
-rw-r--r--util/cmake/helper.py2
6 files changed, 35 insertions, 9 deletions
diff --git a/cmake/FindWrapFreetype.cmake b/cmake/FindWrapFreetype.cmake
new file mode 100644
index 0000000000..521346cc23
--- /dev/null
+++ b/cmake/FindWrapFreetype.cmake
@@ -0,0 +1,26 @@
+# 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 WrapFreetype::WrapFreetype)
+ set(WrapFreetype_FOUND ON)
+ return()
+endif()
+
+set(WrapFreetype_FOUND OFF)
+find_package(Freetype)
+
+if(Freetype_FOUND)
+ # vcpkg defines a lower case target name, while upstream Find module defines a prefixed
+ # upper case name.
+ set(potential_target_names Freetype::Freetype freetype)
+ foreach(target_name ${potential_target_names})
+ if(TARGET ${target_name})
+ set(WrapFreetype_FOUND ON)
+ set(final_target_name ${target_name})
+
+ add_library(WrapFreetype::WrapFreetype INTERFACE IMPORTED)
+ target_link_libraries(WrapFreetype::WrapFreetype INTERFACE ${final_target_name})
+
+ break()
+ endif()
+ endforeach()
+endif()
diff --git a/src/gui/configure.cmake b/src/gui/configure.cmake
index 476b77d8d1..f3799eabdb 100644
--- a/src/gui/configure.cmake
+++ b/src/gui/configure.cmake
@@ -25,8 +25,8 @@ set_property(CACHE INPUT_xcb PROPERTY STRINGS undefined no yes qt system)
qt_find_package(ATSPI2 PROVIDED_TARGETS PkgConfig::ATSPI2)
qt_find_package(Libdrm PROVIDED_TARGETS Libdrm::Libdrm)
qt_find_package(EGL PROVIDED_TARGETS EGL::EGL)
-qt_find_package(Freetype PROVIDED_TARGETS Freetype::Freetype)
-set_package_properties(Freetype PROPERTIES TYPE REQUIRED)
+qt_find_package(WrapFreetype PROVIDED_TARGETS WrapFreetype::WrapFreetype)
+set_package_properties(WrapFreetype::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)
diff --git a/src/platformsupport/fontdatabases/CMakeLists.txt b/src/platformsupport/fontdatabases/CMakeLists.txt
index 140882691c..6ffc2fb2f3 100644
--- a/src/platformsupport/fontdatabases/CMakeLists.txt
+++ b/src/platformsupport/fontdatabases/CMakeLists.txt
@@ -1,6 +1,6 @@
# Generated from fontdatabases.pro.
-qt_find_package(Freetype) # special case
+qt_find_package(WrapFreetype) # special case
qt_find_package(Fontconfig) # special case
#####################################################################
@@ -54,7 +54,7 @@ extend_target(FontDatabaseSupport CONDITION QT_FEATURE_freetype
freetype/qfontengine_ft.cpp freetype/qfontengine_ft_p.h
freetype/qfreetypefontdatabase.cpp freetype/qfreetypefontdatabase_p.h
LIBRARIES
- Freetype::Freetype
+ WrapFreetype::WrapFreetype
)
extend_target(FontDatabaseSupport CONDITION UNIX
diff --git a/src/plugins/platforms/minimal/CMakeLists.txt b/src/plugins/platforms/minimal/CMakeLists.txt
index 203a9e3920..58cd506e96 100644
--- a/src/plugins/platforms/minimal/CMakeLists.txt
+++ b/src/plugins/platforms/minimal/CMakeLists.txt
@@ -1,4 +1,4 @@
-qt_find_package(Freetype) # special case
+qt_find_package(WrapFreetype) # special case
#####################################################################
## qminimal Plugin:
@@ -29,7 +29,7 @@ add_qt_plugin(qminimal
extend_target(qminimal CONDITION QT_FEATURE_freetype
LIBRARIES
- Freetype::Freetype
+ WrapFreetype::WrapFreetype
)
#### Keys ignored in scope 3:.:minimal.pro:NOT TARGET___equals____ss_QT_DEFAULT_QPA_PLUGIN:
diff --git a/src/plugins/platforms/xcb/CMakeLists.txt b/src/plugins/platforms/xcb/CMakeLists.txt
index c6c0c90b25..77fda139cf 100644
--- a/src/plugins/platforms/xcb/CMakeLists.txt
+++ b/src/plugins/platforms/xcb/CMakeLists.txt
@@ -6,7 +6,7 @@ qt_find_package(X11)
qt_find_package(XCB)
qt_find_package(XKB)
qt_find_package(PkgConfig)
-qt_find_package(Freetype)
+qt_find_package(WrapFreetype)
qt_find_package(GLIB2)
pkg_check_modules(XKB_COMMON_X11 xkbcommon-x11>=0.4.1 IMPORTED_TARGET) # special case
@@ -165,7 +165,7 @@ extend_target(XcbQpa CONDITION QT_FEATURE_xcb_native_painting AND QT_FEATURE_xre
extend_target(XcbQpa CONDITION QT_FEATURE_fontconfig AND QT_FEATURE_xcb_native_painting
LIBRARIES
- Freetype::Freetype
+ WrapFreetype::WrapFreetype
)
#####################################################################
## qxcb Plugin:
diff --git a/util/cmake/helper.py b/util/cmake/helper.py
index 1833df0bd3..1873b5bfe0 100644
--- a/util/cmake/helper.py
+++ b/util/cmake/helper.py
@@ -181,7 +181,7 @@ _library_map = [
LibraryMapping('drm', 'Libdrm', 'Libdrm::Libdrm'),
LibraryMapping('egl', 'EGL', 'EGL::EGL'),
LibraryMapping('fontconfig', 'Fontconfig', 'Fontconfig::Fontconfig', resultVariable="FONTCONFIG"),
- LibraryMapping('freetype', 'Freetype', 'Freetype::Freetype', extra=['REQUIRED']),
+ LibraryMapping('freetype', 'WrapFreetype', 'WrapFreetype::WrapFreetype', extra=['REQUIRED']),
LibraryMapping('gbm', 'gbm', 'gbm::gbm'),
LibraryMapping('glib', 'GLIB2', 'GLIB2::GLIB2'),
LibraryMapping('gnu_iconv', None, None),