CMake: Fix QMAKE_LIBS_ZSTD when zstd::libzstd_shared does not exist

qt_find_package() sets QT_TARGETS_OF_QMAKE_LIB_<NAME> to all provided
targets, without checking if each target exists.

qt_generate_qmake_libraries_pri_content() iterates targets listed in
QT_TARGETS_OF_QMAKE_LIB_<NAME>. If a target does not exist,
qt_generate_qmake_libraries_pri_content() trusts it as a library name
and adds it into QMAKE_LIB_<NAME>_<CONFIG> directly.

3073b9c4dec5e5877363794bf81cbd4b84fdb9ee adds zstd::libzstd_shared to
the PROVIDED_TARGETS argument of qt_find_package().
When WrapZSTD::WrapZSTD is found but zstd::libzstd_shared doesn't exist,
QMAKE_LIBS_ZSTD now contains wrong content "libzstd::libzstd_shared".

Pick-to: 6.8 6.7
Change-Id: Id2a79d6c028a80e53d7b9a6a6d11f436d40dde65
Reviewed-by:  Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
Li Xinwei 2024-06-30 12:45:28 +08:00
parent 4dce218ac4
commit 5685323545

View File

@ -258,10 +258,16 @@ macro(qt_find_package)
AND (NOT arg_QMAKE_LIB IN_LIST QT_QMAKE_LIBS_FOR_${arg_MODULE_NAME}))
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 "")
set(${arg_QMAKE_LIB}_existing_targets "")
foreach(provided_target ${arg_PROVIDED_TARGETS})
set(QT_QMAKE_LIB_OF_TARGET_${provided_target} ${arg_QMAKE_LIB} CACHE INTERNAL "")
if(TARGET ${provided_target})
list(APPEND ${arg_QMAKE_LIB}_existing_targets "${provided_target}")
set(QT_QMAKE_LIB_OF_TARGET_${provided_target}
${arg_QMAKE_LIB} CACHE INTERNAL "")
endif()
endforeach()
set(QT_TARGETS_OF_QMAKE_LIB_${arg_QMAKE_LIB}
"${${arg_QMAKE_LIB}_existing_targets}" CACHE INTERNAL "")
endif()
endif()
endmacro()