From cd795abe60df83aadf6b23c243536d4099b197e5 Mon Sep 17 00:00:00 2001 From: Federico Perini Date: Mon, 6 Oct 2025 09:52:28 +0200 Subject: [PATCH] Guard add_library calls in Findtest-drive.cmake Add if(NOT TARGET) guards around add_library calls to prevent conflicts when the target already exists (e.g., when using stdlib with FetchContent after PR #1033 which adds ALIAS targets automatically). This allows users to use the Find module pattern with libraries that already provide namespaced ALIAS targets. --- config/cmake/Findtest-drive.cmake | 36 ++++++++++++++++++------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/config/cmake/Findtest-drive.cmake b/config/cmake/Findtest-drive.cmake index 8337347a2..cac0827d7 100644 --- a/config/cmake/Findtest-drive.cmake +++ b/config/cmake/Findtest-drive.cmake @@ -88,17 +88,19 @@ foreach(method ${${_pkg}_FIND_METHOD}) if("${_pkg}_FOUND") message(STATUS "Found ${_lib} via pkg-config") - add_library("${_lib}::${_lib}" INTERFACE IMPORTED) - target_link_libraries( - "${_lib}::${_lib}" - INTERFACE - "${${_pkg}_LINK_LIBRARIES}" - ) - target_include_directories( - "${_lib}::${_lib}" - INTERFACE - "${${_pkg}_INCLUDE_DIRS}" - ) + if(NOT TARGET "${_lib}::${_lib}") + add_library("${_lib}::${_lib}" INTERFACE IMPORTED) + target_link_libraries( + "${_lib}::${_lib}" + INTERFACE + "${${_pkg}_LINK_LIBRARIES}" + ) + target_include_directories( + "${_lib}::${_lib}" + INTERFACE + "${${_pkg}_INCLUDE_DIRS}" + ) + endif() break() endif() @@ -118,8 +120,10 @@ foreach(method ${${_pkg}_FIND_METHOD}) "${${_pkg}_BINARY_DIR}" ) - add_library("${_lib}::${_lib}" INTERFACE IMPORTED) - target_link_libraries("${_lib}::${_lib}" INTERFACE "${_lib}") + if(NOT TARGET "${_lib}::${_lib}") + add_library("${_lib}::${_lib}" INTERFACE IMPORTED) + target_link_libraries("${_lib}::${_lib}" INTERFACE "${_lib}") + endif() # We need the module directory in the subproject before we finish the configure stage if(NOT EXISTS "${${_pkg}_BINARY_DIR}/include") @@ -140,8 +144,10 @@ foreach(method ${${_pkg}_FIND_METHOD}) ) FetchContent_MakeAvailable("${_lib}") - add_library("${_lib}::${_lib}" INTERFACE IMPORTED) - target_link_libraries("${_lib}::${_lib}" INTERFACE "${_lib}") + if(NOT TARGET "${_lib}::${_lib}") + add_library("${_lib}::${_lib}" INTERFACE IMPORTED) + target_link_libraries("${_lib}::${_lib}" INTERFACE "${_lib}") + endif() # We need the module directory in the subproject before we finish the configure stage FetchContent_GetProperties("${_lib}" SOURCE_DIR "${_pkg}_SOURCE_DIR")