From f145d19c816b37a2f2ecd783a05ea521cffd375f Mon Sep 17 00:00:00 2001 From: Jeremie Vandenplas Date: Tue, 14 Oct 2025 21:00:26 +0200 Subject: [PATCH] Guard add_library calls in Find*.cmake --- config/cmake/Findfortran_stdlib.cmake | 36 ++++++++++++++++----------- config/cmake/Findtest-drive.cmake | 36 ++++++++++++++++----------- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/config/cmake/Findfortran_stdlib.cmake b/config/cmake/Findfortran_stdlib.cmake index a2538f5..cdcf96b 100644 --- a/config/cmake/Findfortran_stdlib.cmake +++ b/config/cmake/Findfortran_stdlib.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}/mod_files") @@ -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") diff --git a/config/cmake/Findtest-drive.cmake b/config/cmake/Findtest-drive.cmake index d6349e3..c113f68 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")