@@ -7,7 +7,7 @@ module fpm_cmd_install
7
7
use fpm_filesystem, only : join_path, list_files
8
8
use fpm_installer, only : installer_t, new_installer
9
9
use fpm_manifest, only : package_config_t, get_package_data
10
- use fpm_model, only : fpm_model_t, FPM_SCOPE_APP
10
+ use fpm_model, only : fpm_model_t, FPM_SCOPE_APP, FPM_SCOPE_TEST
11
11
use fpm_targets, only: targets_from_sources, build_target_t, &
12
12
build_target_ptr, FPM_TARGET_EXECUTABLE, &
13
13
filter_library_targets, filter_executable_targets, filter_modules
@@ -34,7 +34,7 @@ subroutine cmd_install(settings)
34
34
35
35
call get_package_data(package, " fpm.toml" , error, apply_defaults= .true. )
36
36
call handle_error(error)
37
-
37
+
38
38
call build_model(model, settings, package, error)
39
39
call handle_error(error)
40
40
@@ -57,7 +57,7 @@ subroutine cmd_install(settings)
57
57
end if
58
58
59
59
call new_installer(installer, prefix= settings% prefix, &
60
- bindir= settings% bindir, libdir= settings% libdir, &
60
+ bindir= settings% bindir, libdir= settings% libdir, testdir = settings % testdir, &
61
61
includedir= settings% includedir, &
62
62
verbosity= merge (2 , 1 , settings% verbose))
63
63
@@ -72,12 +72,19 @@ subroutine cmd_install(settings)
72
72
call handle_error(error)
73
73
end if
74
74
end if
75
-
75
+
76
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
+ if (allocated (package% test) .and. (package% install% test .or. model% include_tests)) then
82
+
83
+ call install_tests(installer, targets, error)
84
+ call handle_error(error)
85
+
86
+ end if
87
+
81
88
end subroutine cmd_install
82
89
83
90
subroutine install_info (unit , verbose , targets , ntargets )
@@ -97,6 +104,9 @@ subroutine install_info(unit, verbose, targets, ntargets)
97
104
call filter_executable_targets(targets, FPM_SCOPE_APP, temp)
98
105
install_target = [install_target, temp]
99
106
107
+ call filter_executable_targets(targets, FPM_SCOPE_TEST, temp)
108
+ install_target = [install_target, temp]
109
+
100
110
ntargets = size (install_target)
101
111
102
112
if (verbose) then
@@ -144,6 +154,22 @@ subroutine install_executables(installer, targets, error)
144
154
145
155
end subroutine install_executables
146
156
157
+ subroutine install_tests (installer , targets , error )
158
+ type (installer_t), intent (inout ) :: installer
159
+ type (build_target_ptr), intent (in ) :: targets(:)
160
+ type (error_t), allocatable , intent (out ) :: error
161
+ integer :: ii
162
+
163
+ do ii = 1 , size (targets)
164
+ if (targets(ii)% ptr% is_executable_target(FPM_SCOPE_TEST)) then
165
+ call installer% install_test(targets(ii)% ptr% output_file, error)
166
+ if (allocated (error)) exit
167
+ end if
168
+ end do
169
+ if (allocated (error)) return
170
+
171
+ end subroutine install_tests
172
+
147
173
subroutine handle_error (error )
148
174
type (error_t), intent (in ), optional :: error
149
175
if (present (error)) then
0 commit comments