summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2020-11-26 17:52:12 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2020-12-01 12:20:14 +0000
commit569385a639285e46f7ba1b4073e37452cf3eb1bc (patch)
tree22c4b0289d490a55255b6b8b3435b978eb3da375 /cmake
parent55265b737583496436d3c62ebd39c4d2a625138b (diff)
CMake: Fill QT.<module-name>.uses entries in module .pri files
Those entries were always empty. The INTERFACE_QT_MODULE_USES property was never set. Map each public dependency to its qmake lib name and place this value into the module's QT.<module-name>.uses variable. Take into account the "_nolink" target modifier and translate it to qmake's "/nolink". Fixes: QTBUG-88951 Change-Id: Ib6ef65b842a1fe1da3ade55867583343b4ee76ee Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> (cherry picked from commit 92d60ae589442cfbe1e7ac1bb4c42334a09af310) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/QtFindPackageHelpers.cmake8
-rw-r--r--cmake/QtPriHelpers.cmake35
2 files changed, 38 insertions, 5 deletions
diff --git a/cmake/QtFindPackageHelpers.cmake b/cmake/QtFindPackageHelpers.cmake
index bc38089947..2ccd61c938 100644
--- a/cmake/QtFindPackageHelpers.cmake
+++ b/cmake/QtFindPackageHelpers.cmake
@@ -167,10 +167,18 @@ macro(qt_find_package)
set(QT_QMAKE_LIBS_FOR_${arg_MODULE_NAME}
${QT_QMAKE_LIBS_FOR_${arg_MODULE_NAME}};${arg_QMAKE_LIB} CACHE INTERNAL "")
set(QT_TARGETS_OF_QMAKE_LIB_${arg_QMAKE_LIB} ${arg_PROVIDED_TARGETS} CACHE INTERNAL "")
+ foreach(provided_target ${arg_PROVIDED_TARGETS})
+ set(QT_QMAKE_LIB_OF_TARGET_${provided_target} ${arg_QMAKE_LIB} CACHE INTERNAL "")
+ endforeach()
endif()
endif()
endmacro()
+# Return qmake library name for the given target, e.g. return "vulkan" for "Vulkan::Vulkan".
+function(qt_internal_map_target_to_qmake_lib target out_var)
+ set(${out_var} "${QT_QMAKE_LIB_OF_TARGET_${target}}" PARENT_SCOPE)
+endfunction()
+
# This function records a dependency between ${main_target_name} and ${dep_package_name}.
# at the CMake package level.
# E.g. The Tools package that provides the qtwaylandscanner target
diff --git a/cmake/QtPriHelpers.cmake b/cmake/QtPriHelpers.cmake
index 87cc2cfd10..4fe8c609d4 100644
--- a/cmake/QtPriHelpers.cmake
+++ b/cmake/QtPriHelpers.cmake
@@ -116,6 +116,23 @@ function(qt_get_direct_module_dependencies target out_var)
set(${out_var} ${dependencies} PARENT_SCOPE)
endfunction()
+# Return a list of qmake library names for a given list of targets.
+# For example, Vulkan::Vulkan_nolink is mapped to vulkan/nolink.
+function(qt_internal_map_targets_to_qmake_libs out_var)
+ set(result "")
+ foreach(target ${ARGN})
+ string(REGEX REPLACE "_nolink$" "" stripped_target "${target}")
+ qt_internal_map_target_to_qmake_lib(${stripped_target} qmake_lib)
+ if(NOT "${qmake_lib}" STREQUAL "")
+ if(NOT target STREQUAL stripped_target)
+ string(APPEND qmake_lib "/nolink")
+ endif()
+ list(APPEND result "${qmake_lib}")
+ endif()
+ endforeach()
+ set(${out_var} "${result}" PARENT_SCOPE)
+endfunction()
+
# Generates module .pri files for consumption by qmake
function(qt_generate_module_pri_file target)
set(flags INTERNAL_MODULE HEADER_MODULE NO_PRIVATE_MODULE)
@@ -146,8 +163,6 @@ function(qt_generate_module_pri_file target)
get_target_property(module_internal_config "${target}"
"${property_prefix}QT_MODULE_INTERNAL_CONFIG")
- get_target_property(module_uses "${target}"
- "${property_prefix}QT_MODULE_USES")
get_target_property(module_pri_extra_content "${target}"
"${property_prefix}QT_MODULE_PRI_EXTRA_CONTENT")
get_target_property(module_ldflags "${target}"
@@ -156,7 +171,7 @@ function(qt_generate_module_pri_file target)
"${property_prefix}QT_MODULE_DEPENDS")
foreach(var enabled_features disabled_features enabled_private_features disabled_private_features
- module_internal_config module_uses module_pri_extra_content module_ldflags module_depends)
+ module_internal_config module_pri_extra_content module_ldflags module_depends)
if(${var} STREQUAL "${var}-NOTFOUND")
set(${var} "")
else()
@@ -272,6 +287,11 @@ function(qt_generate_module_pri_file target)
set(extra_assignments "\nQT_DEFAULT_QPA_PLUGIN = q${QT_QPA_DEFAULT_PLATFORM}")
endif()
+ # Map the public dependencies of the target to qmake library names.
+ get_target_property(dep_targets ${target} INTERFACE_LINK_LIBRARIES)
+ qt_internal_map_targets_to_qmake_libs(module_uses ${dep_targets})
+ list(JOIN module_uses " " joined_module_uses)
+
file(GENERATE
OUTPUT "${pri_file_name}"
CONTENT
@@ -284,7 +304,7 @@ QT.${config_module_name}.includes = ${public_module_includes}
QT.${config_module_name}.frameworks = ${public_module_frameworks}
QT.${config_module_name}.bins = $$QT_MODULE_BIN_BASE${module_plugin_types_assignment}
QT.${config_module_name}.depends = ${public_module_dependencies}
-QT.${config_module_name}.uses = ${module_uses}
+QT.${config_module_name}.uses = ${joined_module_uses}
QT.${config_module_name}.module_config = ${joined_module_internal_config}${module_build_config}
QT.${config_module_name}.DEFINES = ${joined_target_defines}
QT.${config_module_name}.enabled_features = ${enabled_features}
@@ -312,6 +332,11 @@ ${module_pri_extra_content}
list(APPEND module_internal_config internal_module)
list(JOIN module_internal_config " " joined_module_internal_config)
+ # Map the public dependencies of the private module to qmake library names.
+ get_target_property(dep_targets ${target}Private INTERFACE_LINK_LIBRARIES)
+ qt_internal_map_targets_to_qmake_libs(private_module_uses ${dep_targets})
+ list(JOIN private_module_uses " " joined_private_module_uses)
+
# Generate a preliminary qt_lib_XXX_private.pri file
file(GENERATE
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${private_pri_file_name}"
@@ -323,7 +348,7 @@ QT.${config_module_name}_private.libs = $$QT_MODULE_LIB_BASE
QT.${config_module_name}_private.includes = ${private_module_includes}
QT.${config_module_name}_private.frameworks = ${private_module_frameworks}
QT.${config_module_name}_private.depends = ${private_module_dependencies}
-QT.${config_module_name}_private.uses =
+QT.${config_module_name}_private.uses = ${joined_private_module_uses}
QT.${config_module_name}_private.module_config = ${joined_module_internal_config}
QT.${config_module_name}_private.enabled_features = ${enabled_private_features}
QT.${config_module_name}_private.disabled_features = ${disabled_private_features}"