summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2019-06-20 17:38:47 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2019-08-12 18:23:54 +0200
commitef74730a59fcfd4fff5b719c0310e817737e0efb (patch)
tree1b53f0bd325d2244d7ef2bcd423b1464119672eb
parent50e496bd3ac71ccebc99c0a429b41fb0e7864ac2 (diff)
CMake: Prevent creation of library target when it already exists
When doing plugin auto-importing as part of a Qt static build, it can happen that the same module FooConfig.cmake file is loaded twice. Make sure not to create the same target twice if it was already created previously. Task-number: QTBUG-38913 Change-Id: I734c83ff3c0bb9e3ee9bff37971209c57abaa2b9 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
-rw-r--r--mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in16
1 files changed, 16 insertions, 0 deletions
diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
index d4fd057682..2b7c1d28c4 100644
--- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
+++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
@@ -317,6 +317,22 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
list(REMOVE_DUPLICATES Qt5$${CMAKE_MODULE_NAME}_EXECUTABLE_COMPILE_FLAGS)
!!ENDIF // TEMPLATE != aux
+ # It can happen that the same FooConfig.cmake file is included when calling find_package()
+ # on some Qt component. An example of that is when using a Qt static build with auto inclusion
+ # of plugins:
+ #
+ # Qt5WidgetsConfig.cmake -> Qt5GuiConfig.cmake -> Qt5Gui_QSvgIconPlugin.cmake ->
+ # Qt5SvgConfig.cmake -> Qt5WidgetsConfig.cmake ->
+ # finish processing of second Qt5WidgetsConfig.cmake ->
+ # return to first Qt5WidgetsConfig.cmake ->
+ # add_library cannot create imported target "Qt5::Widgets".
+ #
+ # Make sure to return early in the original Config inclusion, because the target has already
+ # been defined as part of the second inclusion.
+ if(TARGET Qt5::$${CMAKE_MODULE_NAME})
+ return()
+ endif()
+
set(_Qt5$${CMAKE_MODULE_NAME}_LIB_DEPENDENCIES \"$${CMAKE_QT5_MODULE_DEPS}\")
!!IF !isEmpty(CMAKE_INTERFACE_QT5_MODULE_DEPS)