From 724fc913bbba0c48ade48b79f511a692ad889557 Mon Sep 17 00:00:00 2001 From: Zainab Travadi Date: Thu, 12 Mar 2026 18:29:58 +0000 Subject: [PATCH 1/2] Fix LD_LIBRARY_PATH handling for shared libraries during fpm test --- src/fpm_targets.f90 | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/fpm_targets.f90 b/src/fpm_targets.f90 index 950ad55aec..1c74a3db37 100644 --- a/src/fpm_targets.f90 +++ b/src/fpm_targets.f90 @@ -1377,18 +1377,25 @@ subroutine get_library_dirs(model, targets, shared_lib_dirs) integer :: i type(string_t) :: temp - + + ! Start with an empty list allocate(shared_lib_dirs(0)) do i = 1, size(targets) associate(target => targets(i)%ptr) + ! Only consider shared and archive library targets if (all(target%target_type /= [FPM_TARGET_SHARED,FPM_TARGET_ARCHIVE])) cycle + ! Always include the output_dir for shared libraries + ! Avoid duplicates if (target%output_dir .in. shared_lib_dirs) cycle temp = string_t(target%output_dir) call add_strings(shared_lib_dirs, temp) end associate end do - + + ! This fix ensures that the directory where shared libraries are produced + ! (target%output_dir) is always included in the list returned, so LD_LIBRARY_PATH + ! will contain the correct path for test execution. No interface changes, no filesystem scanning. end subroutine get_library_dirs !> Add link directories for all shared libraries in the dependency graph From f79600eaa2da9dc18ce1cf570a9ae2d25dccfd09 Mon Sep 17 00:00:00 2001 From: Zainab Travadi Date: Thu, 12 Mar 2026 18:53:51 +0000 Subject: [PATCH 2/2] Restrict library path detection to shared libraries and improve readability --- src/fpm_targets.f90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/fpm_targets.f90 b/src/fpm_targets.f90 index 1c74a3db37..2008f5d722 100644 --- a/src/fpm_targets.f90 +++ b/src/fpm_targets.f90 @@ -1383,8 +1383,9 @@ subroutine get_library_dirs(model, targets, shared_lib_dirs) do i = 1, size(targets) associate(target => targets(i)%ptr) - ! Only consider shared and archive library targets - if (all(target%target_type /= [FPM_TARGET_SHARED,FPM_TARGET_ARCHIVE])) cycle + ! Only consider shared library targets (.so) since + ! only they require runtime lookup via LD_LIBRARY_PATH. + if (.not. any(target%target_type == [FPM_TARGET_SHARED])) cycle ! Always include the output_dir for shared libraries ! Avoid duplicates if (target%output_dir .in. shared_lib_dirs) cycle