summaryrefslogtreecommitdiffstats
path: root/cmake/FindWrapFreetype.cmake
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 /cmake/FindWrapFreetype.cmake
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>
Diffstat (limited to 'cmake/FindWrapFreetype.cmake')
-rw-r--r--cmake/FindWrapFreetype.cmake26
1 files changed, 26 insertions, 0 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()