From 4b227477fffce0eb2fce1fc805ec74132e36d10f Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Mon, 10 Jul 2023 10:17:55 +0200 Subject: [PATCH] CMake: Prevent infinite loop when generating module .pri files CMake find modules of third-party libraries may create dependency cycles in their imported library targets. For example, Conan's Vulkan::Vulkan is such a candidate. Prevent an infinite loop when generating .pri files for Qt modules that link against such targets. Fixes: QTBUG-95569 Change-Id: I09b4a281930f7c6ce5e8c716fe0ab91e2453a24a Reviewed-by: Alexandru Croitor (cherry picked from commit f7b7262f110ee44f649d2c061832de26d1b3ee5c) Reviewed-by: Qt Cherry-pick Bot --- cmake/QtPriHelpers.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmake/QtPriHelpers.cmake b/cmake/QtPriHelpers.cmake index c619a50f30f..f1d45cdcf6c 100644 --- a/cmake/QtPriHelpers.cmake +++ b/cmake/QtPriHelpers.cmake @@ -26,9 +26,14 @@ function(qt_generate_qmake_libraries_pri_content module_name output_root_dir out set(lib_incdir "") set(lib_libdir "") set(lib_libs "") + set(seen_targets "") while(lib_targets) list(POP_BACK lib_targets lib_target) if(TARGET ${lib_target}) + if(${lib_target} IN_LIST seen_targets) + continue() + endif() + list(APPEND seen_targets ${lib_target}) get_target_property(lib_target_type ${lib_target} TYPE) if(lib_target_type STREQUAL "INTERFACE_LIBRARY") get_target_property(iface_libs ${lib_target} INTERFACE_LINK_LIBRARIES)