Use IF(NOT TARGET ...) before creating imported targets.
authorStephen Kelly <stephen.kelly@kdab.com>
Tue, 15 May 2012 12:35:42 +0000 (14:35 +0200)
committerQt by Nokia <qt-info@nokia.com>
Tue, 15 May 2012 21:03:23 +0000 (23:03 +0200)
Initially we didn't do this because someone could accidentally create
another target of a conflicting name, and used a variable to store whether we
have created the target already or not.

That wasn't adequeate to deal with finding the package in a scope
like a function, so we used a directory property. However, the directory
property is not valid in the same scopes as the defined target. For
example, finding a Qt module in both a directory and a subdirectory causes
a conflict.

As it is already unlikely that a target would be accidentally created with
a name like Qt5::Core, we should simply use the IF(TARGET) form.

Change-Id: If64f25d45f51edcd1edb0d4bfb5ed3bb2479bd27
Reviewed-by: David Faure <faure@kde.org>
mkspecs/cmake/Qt5BasicConfig.cmake.in
tests/auto/cmake/CMakeLists.txt
tests/auto/cmake/pass10/CMakeLists.txt [new file with mode: 0644]
tests/auto/cmake/pass10/subdir1/CMakeLists.txt [new file with mode: 0644]

index a6e39b6..fa8a371 100644 (file)
@@ -109,9 +109,7 @@ list(APPEND _Qt5Gui_LIB_DEPENDENCIES ${JPEG_LIBRARIES})
 
 !!ENDIF # Static
 
-get_property(_qt5$${CMAKE_MODULE_NAME}TargetExists DIRECTORY PROPERTY _Qt5$${CMAKE_MODULE_NAME}_target)
-if (NOT _qt5$${CMAKE_MODULE_NAME}TargetExists)
-    set_property(DIRECTORY PROPERTY _Qt5$${CMAKE_MODULE_NAME}_target TRUE)
+if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
 !!IF !isEmpty(CMAKE_STATIC_TYPE)
     add_library(Qt5::$${CMAKE_MODULE_NAME} STATIC IMPORTED)
 !!ELSE
index 64b2b8a..40ceea1 100644 (file)
@@ -97,3 +97,4 @@ find_package(Qt5DBus QUIET)
 if (Qt5DBus_FOUND AND NOT APPLE)
     expect_pass(pass9)
 endif()
+expect_pass(pass10)
diff --git a/tests/auto/cmake/pass10/CMakeLists.txt b/tests/auto/cmake/pass10/CMakeLists.txt
new file mode 100644 (file)
index 0000000..bd7051a
--- /dev/null
@@ -0,0 +1,9 @@
+
+cmake_minimum_required(VERSION 2.8)
+
+project(pass10)
+
+find_package(Qt5Core REQUIRED)
+
+add_subdirectory(subdir1)
+
diff --git a/tests/auto/cmake/pass10/subdir1/CMakeLists.txt b/tests/auto/cmake/pass10/subdir1/CMakeLists.txt
new file mode 100644 (file)
index 0000000..86c05f5
--- /dev/null
@@ -0,0 +1,2 @@
+
+find_package(Qt5Core REQUIRED)