@@ -9,7 +9,8 @@ module fpm_cmd_install
99  use  fpm_manifest, only : package_config_t, get_package_data
1010  use  fpm_model, only : fpm_model_t, FPM_SCOPE_APP
1111  use  fpm_targets, only: targets_from_sources, build_target_t, &
12-                          build_target_ptr, FPM_TARGET_EXECUTABLE
12+                          build_target_ptr, FPM_TARGET_EXECUTABLE, &
13+                          filter_library_targets, filter_executable_targets
1314  use  fpm_strings, only : string_t, resize
1415  implicit none 
1516  private 
@@ -28,6 +29,7 @@ subroutine cmd_install(settings)
2829    type (build_target_ptr), allocatable  ::  targets(:)
2930    type (installer_t) ::  installer
3031    character (len= :), allocatable  ::  lib, dir
32+     type (string_t), allocatable  ::  list(:)
3133    logical  ::  installable
3234
3335    call  get_package_data(package, " fpm.toml" = .true. )
@@ -61,13 +63,15 @@ subroutine cmd_install(settings)
6163      verbosity= merge (2 , 1 , settings% verbose))
6264
6365    if  (allocated (package% library) .and.  package% install% library) then 
64-       dir =  join_path(model% output_directory, model% package_name)
65-       lib =  " lib" // model% package_name// " .a" 
66-       call  installer% install_library(join_path(dir, lib), error)
67-       call  handle_error(error)
66+       call  filter_library_targets(targets, list)
6867
69-       call  install_module_files(installer, dir, error)
70-       call  handle_error(error)
68+       if  (size (list) > 0 ) then 
69+         call  installer% install_library(list(1 )% s, error)
70+         call  handle_error(error)
71+ 
72+         call  install_module_files(installer, dir, error)
73+         call  handle_error(error)
74+       end if 
7175    end if 
7276
7377    if  (allocated (package% executable)) then 
@@ -85,24 +89,17 @@ subroutine install_info(unit, package, model, targets)
8589
8690    integer  ::  ii, ntargets
8791    character (len= :), allocatable  ::  lib
88-     type (string_t), allocatable  ::  install_target(:)
92+     type (string_t), allocatable  ::  install_target(:), temp(:) 
8993
90-     call  resize (install_target)
94+     allocate (install_target( 0 ) )
9195
92-     ntargets =  0 
93-     if  (allocated (package% library) .and.  package% install% library) then 
94-       ntargets =  ntargets +  1 
95-       lib =  join_path(model% output_directory, model% package_name, &
96-         " lib" // model% package_name// " .a" 
97-       install_target(ntargets)% s =  lib
98-     end if 
99-     do  ii =  1 , size (targets)
100-       if  (is_executable_target(targets(ii)% ptr)) then 
101-         if  (ntargets >=  size (install_target)) call  resize(install_target)
102-         ntargets =  ntargets +  1 
103-         install_target(ntargets)% s =  targets(ii)% ptr% output_file
104-       end if 
105-     end do 
96+     call  filter_library_targets(targets, temp)
97+     install_target =  [install_target, temp]
98+ 
99+     call  filter_executable_targets(targets, FPM_SCOPE_APP, temp)
100+     install_target =  [install_target, temp]
101+ 
102+     ntargets =  size (install_target)
106103
107104    write (unit, ' ("#", *(1x, g0))' 
108105      " total number of installable targets:" 
0 commit comments