@@ -30,6 +30,7 @@ subroutine cmd_install(settings)
30
30
type (installer_t) :: installer
31
31
type (string_t), allocatable :: list(:)
32
32
logical :: installable
33
+ integer :: ntargets
33
34
34
35
call get_package_data(package, " fpm.toml" , error, apply_defaults= .true. )
35
36
call handle_error(error)
@@ -40,18 +41,17 @@ subroutine cmd_install(settings)
40
41
call targets_from_sources(targets, model, settings% prune, error)
41
42
call handle_error(error)
42
43
44
+ call install_info(output_unit, settings% list, targets, ntargets)
45
+ if (settings% list) return
46
+
43
47
installable = (allocated (package% library) .and. package% install% library) &
44
- .or. allocated (package% executable)
48
+ .or. allocated (package% executable) .or. ntargets> 0
49
+
45
50
if (.not. installable) then
46
51
call fatal_error(error, " Project does not contain any installable targets" )
47
52
call handle_error(error)
48
53
end if
49
54
50
- if (settings% list) then
51
- call install_info(output_unit, targets)
52
- return
53
- end if
54
-
55
55
if (.not. settings% no_rebuild) then
56
56
call build_package(targets,model,verbose= settings% verbose)
57
57
end if
@@ -73,18 +73,20 @@ subroutine cmd_install(settings)
73
73
end if
74
74
end if
75
75
76
- if (allocated (package% executable)) then
76
+ if (allocated (package% executable) .or. ntargets > 0 ) then
77
77
call install_executables(installer, targets, error)
78
78
call handle_error(error)
79
79
end if
80
80
81
81
end subroutine cmd_install
82
82
83
- subroutine install_info (unit , targets )
83
+ subroutine install_info (unit , verbose , targets , ntargets )
84
84
integer , intent (in ) :: unit
85
+ logical , intent (in ) :: verbose
85
86
type (build_target_ptr), intent (in ) :: targets(:)
87
+ integer , intent (out ) :: ntargets
86
88
87
- integer :: ii, ntargets
89
+ integer :: ii
88
90
type (string_t), allocatable :: install_target(:), temp(:)
89
91
90
92
allocate (install_target(0 ))
@@ -96,12 +98,16 @@ subroutine install_info(unit, targets)
96
98
install_target = [install_target, temp]
97
99
98
100
ntargets = size (install_target)
101
+
102
+ if (verbose) then
99
103
100
- write (unit, ' ("#", *(1x, g0))' ) &
101
- " total number of installable targets:" , ntargets
102
- do ii = 1 , ntargets
103
- write (unit, ' ("-", *(1x, g0))' ) install_target(ii)% s
104
- end do
104
+ write (unit, ' ("#", *(1x, g0))' ) &
105
+ " total number of installable targets:" , ntargets
106
+ do ii = 1 , ntargets
107
+ write (unit, ' ("-", *(1x, g0))' ) install_target(ii)% s
108
+ end do
109
+
110
+ endif
105
111
106
112
end subroutine install_info
107
113
@@ -129,7 +135,7 @@ subroutine install_executables(installer, targets, error)
129
135
integer :: ii
130
136
131
137
do ii = 1 , size (targets)
132
- if (is_executable_target( targets(ii)% ptr)) then
138
+ if (targets(ii)% ptr% is_executable_target(FPM_SCOPE_APP )) then
133
139
call installer% install_executable(targets(ii)% ptr% output_file, error)
134
140
if (allocated (error)) exit
135
141
end if
@@ -138,16 +144,6 @@ subroutine install_executables(installer, targets, error)
138
144
139
145
end subroutine install_executables
140
146
141
- elemental function is_executable_target (target_ptr ) result(is_exe)
142
- type (build_target_t), intent (in ) :: target_ptr
143
- logical :: is_exe
144
- is_exe = target_ptr% target_type == FPM_TARGET_EXECUTABLE .and. &
145
- allocated (target_ptr% dependencies)
146
- if (is_exe) then
147
- is_exe = target_ptr% dependencies(1 )% ptr% source% unit_scope == FPM_SCOPE_APP
148
- end if
149
- end function is_executable_target
150
-
151
147
subroutine handle_error (error )
152
148
type (error_t), intent (in ), optional :: error
153
149
if (present (error)) then
0 commit comments