summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2020-08-03 16:28:16 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2020-08-06 19:15:39 +0200
commit92ee9bd6b885879090ba57e49c8bd84a06d42b2b (patch)
tree0c0c691394595bb5fff42d31632e1c9ea9a21ba7 /src
parentbd2bcd4e1d38f18d2716cbebf7d106c090564217 (diff)
CMake: Properly handle CONFIG += thread aka Threads::Threads
mkspecs/features/qt.prf adds a dependency on the system threading library if the Qt Core thread feature is enabled. Because qt.prf is loaded by any public or internal Qt project, it's essentially a public dependency for any Qt consumer. To mimic that in CMake, we check if the thread feature is enabled, and and set the Threads::Threads library as a dependency of Qt6::Platform, which is a public target used by all Qt modules and plugins and Qt consumers. We also need to create a Qt6Dependencies.cmake file so we find_package(Threads) every time find_package(Qt6) is called. For the .prl files to be usable, we have to filter out some CMake implementation specific directory separator tokens 'CMAKE_DIRECTORY_ID_SEP' aka '::@', which are added because we call target_link_libraries() with a target created in a different scope (I think). As a result of this change, we shouldn't have to hardcode Threads::Threads in other projects, because it's now a global public dependency. Task-number: QTBUG-85801 Task-number: QTBUG-85877 Change-Id: Ib5d662c43b28e63f7da49d3bd77d0ad751220b31 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/CMakeLists.txt8
-rw-r--r--src/plugins/sqldrivers/sqlite/CMakeLists.txt3
-rw-r--r--src/testlib/CMakeLists.txt1
3 files changed, 7 insertions, 5 deletions
diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt
index 0702c32170..a4890f9bc9 100644
--- a/src/corelib/CMakeLists.txt
+++ b/src/corelib/CMakeLists.txt
@@ -249,7 +249,6 @@ qt_add_module(Core
../3rdparty/tinycbor/src
LIBRARIES
Qt::GlobalConfigPrivate # special case
- Threads::Threads # special case
PRECOMPILED_HEADER
"global/qt_pch.h"
NO_PCH_SOURCES
@@ -276,6 +275,13 @@ endif()
qt_generate_qconfig_cpp()
+# Handle qtConfig(thread): CONFIG += thread like in qt.prf.
+# Aka if the feature is enabled, publically link against the threading library.
+# This also ensures the link flag is in the .prl file.
+if(QT_FEATURE_thread)
+ target_link_libraries(Platform INTERFACE Threads::Threads)
+endif()
+
# Handle QObject: Automoc does not work for this as it would
# require to spill internals into users:
qt_add_module(Core_qobject STATIC
diff --git a/src/plugins/sqldrivers/sqlite/CMakeLists.txt b/src/plugins/sqldrivers/sqlite/CMakeLists.txt
index 5cc2791e7d..154516b5ff 100644
--- a/src/plugins/sqldrivers/sqlite/CMakeLists.txt
+++ b/src/plugins/sqldrivers/sqlite/CMakeLists.txt
@@ -33,7 +33,6 @@ qt_extend_target(QSQLiteDriverPlugin CONDITION QT_FEATURE_system_sqlite
# special case begin
if (NOT QT_FEATURE_system_sqlite)
- qt_find_package(Threads REQUIRED PROVIDED_TARGETS Threads::Threads)
# On newer compilers compiling sqlite.c produces warnings
qt_disable_warnings(QSQLiteDriverPlugin)
endif()
@@ -52,8 +51,6 @@ qt_extend_target(QSQLiteDriverPlugin CONDITION NOT QT_FEATURE_system_sqlite
SQLITE_OMIT_COMPLETE
INCLUDE_DIRECTORIES
../../../3rdparty/sqlite
- PUBLIC_LIBRARIES # special case
- Threads::Threads # special case
)
qt_extend_target(QSQLiteDriverPlugin CONDITION CMAKE_BUILD_TYPE STREQUAL Release AND NOT QT_FEATURE_system_sqlite
diff --git a/src/testlib/CMakeLists.txt b/src/testlib/CMakeLists.txt
index 22df4c93b4..226bf079b8 100644
--- a/src/testlib/CMakeLists.txt
+++ b/src/testlib/CMakeLists.txt
@@ -62,7 +62,6 @@ qt_add_module(Test
QT_BUILD_TESTLIB_LIB # special case
LIBRARIES
Qt::CorePrivate
- Threads::Threads # special case
PUBLIC_LIBRARIES
Qt::Core
PRIVATE_MODULE_INTERFACE